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

dat*_*.io 10 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";
Run Code Online (Sandbox Code Playgroud)

输出的内容如下:

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

这个问题是,总是有一个额外的反斜杠\,其中有换行符,例如在地址字段中.

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

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

任何方式使SELECT ... OUTFILE ...做同样的事情?

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

mat*_*exx 6

试试这个:

SELECT * FROM business WHERE id > 0 AND id <= 20000 INTO OUTFILE "business.csv"
fields terminated by ',' OPTIONALLY ENCLOSED BY '"' escaped by '"' 
LINES TERMINATED BY '\n';
Run Code Online (Sandbox Code Playgroud)

我认为问题是MySQL试图在你的文本字段中转换换行符('\n'),因为它是你的行终止符.

FIELDS ESCAPED BY控制如何编写特殊字符.如果FIELDS ESCAPED BY字符不为空,则将其用作输出后面的字符前面的前缀:

FIELDS ESCAPED BY字符

FIELDS [OPTIONALLY]包含在字符中

FIELDS TERMINATED BY和LINES TERMINATED BY值的第一个字符

ASCII NUL(零值字节;在转义字符后实际写入的内容是ASCII"0",而不是零值字节)

(MySQL)

我真的不明白为什么它正在做你正在做的事情,但我能在我的Mac上得到类似的东西,上面的查询似乎在我的情况下修复了输出.

希望有所帮助!


Jam*_*ger 5

看起来MySql导出无法正确导出Newlines和Quotes.

导出时,MySql将自动转义

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

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

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

例如,如果值包含如下所示的换行符:

这是第1行

这是"第2行",其中包含引号

它应该成为

"这是第1行

这是""第2行"",其中包含引号"

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

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

  • +1我已经花了很长时间解决这个问题。完全为什么MySQL不能在没有众多选项和hack的情况下仅导出为“标准” CSV是我的一个谜。 (3认同)