mysql - 额外的反斜杠\当 SELECT ... INTO OUTFILE ... 在 MySQL

标签 mysql sql into-outfile

所以我正在尝试将 MySQL 表导出为 CSV。我正在使用这个查询:

SELECT * FROM business WHERE id > 0 AND id <= 20000 INTO OUTFILE "business.csv"
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY "\n";

输出是这样的:

http://postimage.org/image/2ghyenh5w/full/

这样做的问题是总是有一个额外的反斜杠\那里有换行符,例如在地址字段中。

但是,从 phpMyAdmin 导出的 CSV 没有它:

http://postimage.org/image/2gi026tno/full/

有什么方法可以让 SELECT ... OUTFILE ... 做同样的事情吗?

我正在处理的表有 2000 万条记录,phpMyAdmin 对于每个导出操作只能处理大约 500,000 条记录 - 否则它将变为空白或 mysql 服务器消失等。

最佳答案

MySQL 导出似乎无法正确导出换行符和引号。

导出时,MySQL 会自动转义两者

  • 字段分隔符和
  • 行分隔符

默认情况下,转义字符是反斜杠。您可以通过在查询中添加 ESCAPED BY '' 来覆盖它。

不幸的是,在“普通”(Excel 兼容)CSV 文件中,您可能需要对换行符和引号使用不同的编码。具体来说,您希望换行符不转义,引号加倍。

例如如果一个值包含这样的换行符:

This is line 1
And this is "Line 2", which contains quotes

应该变成

"This is line 1
And this is ""Line 2"", which contains quotes"

我找到的解决方案是预先转义引号,并将 ESCAPED BY ''(一个空字符串)添加到我的查询中。

SELECT REPLACE(field1, '"', '""'),  
       REPLACE(field2, '"', '""'),  
       ...  
FROM ...  
WHERE ...  
INTO OUTFILE '/someFile.csv'  
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY ''  
LINES TERMINATED BY '\n'

关于mysql - 额外的反斜杠\当 SELECT ... INTO OUTFILE ... 在 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5268088/

相关文章:

mysql - SQL外连接一张表和两张表

mysql - 条件中包含另一个查询的复杂查询

sql - 使用 COUNT() 从子查询进行 MAX() 查询

mysql - 在mysql输出文件中保留十进制0

MySQL 如何从旧磁盘恢复数据?

c# - MySql 如果不存在则插入

mysql - MySQL 查询中的类型检查

mysql - 将mysql数据导出到csv文件

mysql - WHERE语句查找一个月内的所有记录?

sql - DB2 LIKE 运算符的奇怪长度限制