我有一个查询,将每行两列的数据导出到一个文件中。在每个列的文件数据中应该用回车符分隔,如下所示:
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
我确信我错过了一些明显的东西:)
答案 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发行版中。