MySQL:查询中的回车符

Dan*_*iel 8 mysql carriage-return

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

row1column1
row1column2
row2column1
row2column2
row3column1
row3column2

我尝试使用char(13):

SELECT CONCAT(column1, char(13), column2) FROM my_table INTO outfile 'my_file'
Run Code Online (Sandbox Code Playgroud)

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

row1column1
\
row1column2
row2column1
\
row2column1

我确定我错过了明显的东西:)

Hai*_*vgi 7

我在mysql网站上看到它,希望对你有所帮助.

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

...... INTO OUTFILE'/ temp.csv'FIELDS ESCAPED''''终止','''''''''''''''''''''''''

但是回车的字段可能会破坏CSV,因为当找到\ r \n换行符时,MySQL会自动关闭一个字段.要解决此问题,请用\n替换所有\ r \n符号.该字段在\n中断时不会关闭,它将被读入Excel中的单个单元格.您可以在同一SQL语句中执行此操作,例如:

SELECT REPLACE(field_with_line_breaks, '\ r \n', '\n')FROM表INTO OUTFILE '/temp.csv' ESCAPED BY字段 ' ""' TERMINATED BY '' ENCLOSED BY '"' 结尾由线'\ r \n';

我还发现空值可能会破坏CSV.这些可以用类似的方式处理:

SELECT IFNULL(possible_null_field, "")FROM表INTO OUTFILE '/temp.csv' 字段ESCAPED BY ' ""' TERMINATED BY '' ENCLOSED BY '"' TERMINATED BY '\ r\N' 线;

注意:这将使用空字符串替换NULL值,这在技术上并不相同,但它会在Excel中为您提供一个空单元格,而不是破坏CSV结构并将以下单元格移到左侧.


小智 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';
Run Code Online (Sandbox Code Playgroud)

我不得不改为:

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';
Run Code Online (Sandbox Code Playgroud)

有没有在田的逃了出来,这在mysql中了此错误双引号:"错误1083:字段分隔符的说法是不是预期;检查手册".

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