2011-04-11 57 views
2

我遇到類似於this question的問題。那就是 - 我需要將MySQL數據庫中的一些UTF8數據導出到MS Excel。將MySQL用於OUTFILE以生成Excel可讀的UTF8數據

的陷阱親切Excel提供:

  • Excel打開UTF8格式的CSV文件作爲ANSCI,從而打破
  • Excel中打開的選項卡分隔的UTF8文件正確,但對於換行不支持(我的數據有斷行,雖然在最壞的情況下我可能會丟失這些)
  • Excel ,apparently,開放UTF-16LE(小端)編碼的CSV確定。不過,就我所知,MySQL INTO OUTFILE不接受內容編碼參數,而只是默認使用數據庫編碼(UTF8)。

我的網絡應用是PHP驅動的,但不幸的是我不能使用PHP Excel文件製作庫,因爲數據庫非常大。我所有的輸出都必須通過MySQL完成。

如果有人知道如何讓MySQL跳過這個Excel的環節,那會很棒。

非常感謝,

傑克

編輯This答案介紹了Excel 2007中添加「物料清單」的文件,這可能是我能做到通過提供有效的解決方案通過附加BOM的PHP腳本將輸出的文件發送到客戶端。理想情況下,我想找到一個在2003年也可以使用的解決方案。

回答

1

我記得遇到這個問題,用Excel。 BOM修正適用於Excel 2007和2010。我們也希望支持2003,但是我們的解決方案只是編寫XLS文件而不是CSV文件(使用Java)。這聽起來不像是你的選擇,因爲你是從MySQL導出的。想到的一個想法是在導出後將UTF8輸出轉換爲UTF-16LE。 This page解釋瞭如何用Perl做到這一點。

+0

很高興知道BOM修正適用於更高版本。肯定會實現這一點。 我喜歡在導出後轉換爲UTF-16LE的想法。由於某種原因沒有考慮到這一點。真的很有幫助的答案 - 謝謝。 – 2011-04-11 09:14:56

1

如需辦理likebreaks我建議增加:

FIELDS ENCLOSED BY '"' 

一個更完整的示例從mysql docs

SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt' 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY '\n' 
    FROM test_table;