2009-06-23 142 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中。