2009-06-23 63 views
8

我有一個查詢,將每行的兩列數據導出到一個文件中。MySQL:查詢中的回車返回

row1column1
row1column2
row2column1
row2column2
row3column1
row3column2

我嘗試使用焦炭(13):在從每一列中的文件數據應通過回車,像這樣分離:

SELECT CONCAT(column1, char(13), column2) FROM my_table INTO outfile 'my_file' 

並且輸出文件看起來非常好(eac h列數據在另一行中),但是當我將它用作應接受描述格式的程序的輸入時,它不能識別它。但是,當我手動刪除文件中的所有回車符並通過按「回車」鍵再次添加它們時,我的程序就可以毫無問題地識別出文件。 當我試圖用CHAR(13),焦炭(10),我的輸出文件是這樣的:

row1column1
\
row1column2
row2column1
\
row2column1

我敢肯定我錯過了這裏的東西:)

+0

什麼格式的文件輸出 ,csv文件? – 2009-06-23 10:30:52

回答

7

我看到它在MySQL網站,希望它的幫助你。

應使用以下語法 在通過Microsoft Excel中期望的格式 創建一個CSV文件:

... INTO OUTFILE '/temp.csv' 字段 ESCAPED BY ' 「」' TERMINATED BY '' ENCLOSED BY '「' TERMINATED BY '\ r \ N' 線;

然而,隨着滑架字段返回 可以打破CSV如MySQL將 自動關閉的字段時 \ r \ n換行符被找到。要在此工作 ,請將所有\ r \ n中斷 替換爲\ n。該字段在 \ n中斷處不會關閉,並且將在Excel中讀入 單元。你可以這樣做 在同一個SQL語句中, 例如:

選擇替換(field_with_line_breaks, '\ r \ n', '\ n')FROM表INTO OUTFILE '/temp.csv' FIELDS ESCAPED BY ' 「」' TERMINATED BY '' ENCLOSED BY '「' LINES TERMINATED BY '\ r \ n';

我還發現,空值可能 打破CSV這些可以在 一個處理。類似的方法:

SELECT IFNULL(possible_null_field,「」) FROM table INTO OUTFILE'/ temp。CSV ' FIELDS ESCAPED BY ' 「」' 結尾BY ',」 ENCLOSED BY '「' LINES TERMINATED BY '\ r \ n';

注:本替換NULL值與 一個空字符串這在技術上是 不一樣的事情,但它會給 你在Excel中的空單元格,而不是 打破CSV結構和 以下細胞轉移到 左

4

儘量只CHAR(10) - 這是「\ n「 - UNIX方式。
Just char(13)「\ r」是(舊)mac方式,「\ r \ n」是windows方式,但我懷疑MySQL只是對每行使用\ n,所以您需要匹配它。

+0

只在兩列之間放入「\」 – Daniel 2009-06-23 11:23:44

+0

請注意,要使查詢在CLI(mysql -Ne)上工作,我必須使用-r寫入字段而不進行轉換。與--batch一起使用。 HTH,丹。 – 2016-01-08 14:18:04

1

您可能在操作系統之間對換行符的解釋存在差異。

如果你的MySQL數據庫是在Unix/Linux和文件將在Unix上讀取或數據庫是在Windows上,將在Windows閱讀那就試試這個:

select * into outfile 'my_file' 
fields terminated by '\n' lines terminated by '\n' 
from my_table; 

如果你的MySQL數據庫是使用小,命令行

select * into outfile 'my_file' 
fields terminated by '\r\n' lines terminated by '\r\n' 
from my_table; 

您還可以將「CRLF」(Windows)和「LF」之間的文件(UNIX)換行:Unix/Linux操作系統和文件將在Windows上閱讀,然後試試這個名爲dos2unix和unix2dos的實用程序,它包含在大多數Linux發行版中。

4

哈伊姆Evgi的答覆工作,但:

SELECT REPLACE(field_with_line_breaks, '\r\n', '\n') FROM table INTO OUTFILE '/temp.csv' FIELDS ESCAPED BY '""' TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n'; 

我不得不更改爲:

SELECT REPLACE(field_with_line_breaks, '\r\n', '\n') FROM table INTO OUTFILE '/temp.csv' FIELDS ESCAPED BY '"' TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n'; 

有在田野雙引號來轉義BY,這些都給mysql的這個錯誤:「錯誤1083:字段分隔符參數不是預期的;檢查手冊「。

將其更改爲單引號會停止該錯誤並導出文件。然後,我可以用新行格式正確地將它導入到excel中。