MySQL:查询中的回车符

时间:2009-06-23 10:19:53

标签: mysql carriage-return

我有一个查询,将每行两列的数据导出到一个文件中。在每个列的文件数据中应该用回车符分隔,如下所示:

row1column1
row1column2
row2column1
row2column2
row3column1
row3column2

我尝试使用char(13):

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

并且输出文件看起来非常好(每列数据都在另一行),但是当我将它用作应该接受所描述格式的程序的输入时,它无法识别它。但是,当我手动擦除文件中的所有回车并通过按“回车”键再次添加它们时,我的程序识别该文件没有问题。 当我尝试使用char(13),char(10)时,我的输出文件看起来像这样:

row1column1
\
row1column2
row2column1
\
row2column1

我确信我错过了一些明显的东西:)

4 个答案:

答案 0 :(得分:7)

我在mysql网站上看到它,希望它的帮助你。

  

您应该使用以下语法   以格式创建CSV文件   预期的Microsoft Excel:

     

... INTO OUTFILE'/temp.csv'FIELDS   ESCAPED BY''“'终止','   由'''终止的线条所包围   '\ r \ n';

     

但是有回车的字段   可能会像MySQL一样打破CSV   当自动关闭一个字段   \ r \ n发现换行符。上班   围绕这个,替换所有\ r \ n休息   用\ n。该领域没有关闭   \ n休息,它将被读入   Excel中的单个单元格。你可以这样做   在同一个SQL语句中,for   例如:

     

SELECT REPLACE(field_with_line_breaks,   '\ r \ n','\ n')FROM表INTO OUTFILE   '/temp.csv'FIELDS ESCAPED BY'“”'   终止',''包含''''   由'\ r \ n';

终止的线路      

我还发现空值可以   打破CSV。这些可以在处理   类似的方式:

     

SELECT IFNULL(possible_null_field,“”)   从表INTO OUTFILE'/ temp.csv'   FIELDS ESCATEED''​​“'终止于   ','封闭'''终止线路   BY'\ r \ n';

     

注意:这将用NULL替换NULL值   一个技术上空的字符串   不一样,但它会给   你在Excel中的空单元格而不是   打破CSV结构和   将以下细胞转移到   左

答案 1 :(得分:5)

Haim 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';

在FIELDS ESCAPED BY中有一个双引号,它在mysql中给出了这个错误:“错误1083:字段分隔符参数不是预期的;检查手册”。

将其更改为单引号会停止错误并导出文件。然后我能够成功地将其导入到Excel中,并正确格式化换行符。

答案 2 :(得分:4)

尝试使用char(10) - 这是“\ n” - UNIX方式 只是char(13)“\ r”是(旧的)mac方式而“\ r \ n”是windows方式,但我怀疑MySQL只为每行使用\ n,所以你需要匹配它。 / p>

答案 3 :(得分:1)

您可能在操作系统之间对换行符的解释存在差异。

如果您的MySQL数据库在Unix / Linux上,并且将在Unix上读取文件或在Windows上读取数据库并将在Windows上读取,请尝试以下操作:

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

如果您的MySQL数据库在Unix / Linux上,并且将在Windows上读取文件,请尝试以下操作:

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

您还可以使用名为dos2unix和unix2dos的小型命令行实用程序在“CRLF”(Windows)和“LF”(Unix)换行符之间转换文件,该实用程序包含在大多数Linux发行版中。