我有一个查询,它将每行两列的数据导出到一个文件中。在文件中,每列中的数据应该用回车符分隔,类似于:
row1column1
row1column2
row2column1
row2column2
row3column1
row3column2
我尝试使用char(13):
SELECT CONCAT(column1, char(13), column2) FROM my_table INTO outfile 'my_file'而且输出文件看起来非常好(每个列数据都在另一行中),但是当我使用它作为应该接受描述格式的程序的输入时,它无法识别它。但是,当我手动删除文件中的所有回车符,并通过按"enter“键再次添加它们时,我的程序可以毫无问题地识别该文件。当我尝试使用char(13),char(10)时,我的输出文件如下所示:
row1column1
\
row1column2
row2column1
\
row2column1
我确信我在这里遗漏了一些明显的东西:)
发布于 2009-06-23 10:31:58
我在mysql网站上看到过,希望能对你有所帮助。
应使用以下语法以Microsoft Excel所需的格式创建CSV文件:
..。到OUTFILE '/temp.csv‘字段中,转义为'""’以‘终止于',’由'"‘行’终止于'\r\n';
但是,带有回车符的字段可能会中断CSV,因为当找到换行符时,\r\n MySQL会自动关闭字段。若要解决此问题,请将所有\r\n换行符替换为\n。字段不会在\n换行符上关闭,它将被读取到Excel中的单个单元格中。您可以在同一个SQL语句中执行此操作,例如:
SELECT REPLACE(field_with_line_breaks,'\r\n','\n') FROM table INTO OUTFILE '/temp.csv‘字段由'""’终止于',‘由'"’结束于‘\r\n’行所包围;
我还发现空值可能会破坏CSV。可以用类似的方式处理这些问题:
SELECT IFNULL(possible_null_field,"") FROM table INTO OUTFILE '/temp.csv‘字段由'""’结束于',‘由'"’结束于‘,’‘结束于’\r\n‘行进行转义;
注意:这将用空字符串替换空值,这在技术上是不同的,但它将在Excel中给出一个空单元格,而不是打破CSV结构并将以下单元格向左移动。
发布于 2010-10-17 01:08:04
哈伊姆·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';在转义的字段中有一个双引号,这在mysql中给出了这个错误:“错误1083:字段分隔符参数不是所期望的;请检查手册”。
将其更改为单引号可停止错误并导出文件。然后,我可以成功地将其导入到excel中,换行符格式正确。
发布于 2009-06-23 10:32:04
尝试使用char(10) --即"\n“-- UNIX方式。
char(13) "\r“是(旧的) mac方式,"\r \n”是windows方式,但我怀疑MySQL只对每一行使用\n,所以您需要匹配它。
https://stackoverflow.com/questions/1031716
复制相似问题