在包含空值和需要双引号转义的列(即,包含'"'字符的列)的结果集上使用 MySQL 的 SELECT ... OUTFILE 时遇到了一些困难。这是我正在使用的 outfile 语法:
INTO OUTFILE '$csv_file'
FIELDS ESCAPED BY '""' TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n'
我的问题与查询的 FIELDS ESCAPED BY 部分有关-如果省略此部分,则空值将正确导出(...,“\ N”,...是 csv 中的样子)。
但是,包含双引号的列将在 excel 中拆分为多行/多列。这是因为 excel 要求通过将列中的 '"' 字符写为 '""' 来进行转义。
包含 FIELDS ESCAPED BY 子句修复了包含双引号字符的列的 excel 问题,但是,它破坏了 NULL 列。NULL 列导出为 ( ..."N,... ) 缺少列上的反斜杠和尾随引号。在 excel 中,由于缺少右引号,这会导致多列相互折叠。
我的目标是能够导出包含双引号和换行符的列,以及将空列导出为 \N,但是我似乎不知道该怎么做。MySQL 文档指出 FIELDS ESCAPED BY 会影响 NULL 列的输出方式,但我无法弄清楚 '""' 的转义序列如何导致在 NULL 列上删除反斜杠和尾随引号
目前,我的解决方案是在将每行输出给用户时执行字符串替换,方法是使用 FIELDS ESCAPED BY 并将 '"N,' 替换为 '"\N",'。这似乎可行,但它没有感觉不对,我担心它会导致一些问题
选择列上的 IFNULL( ) 可能是一个选项,但我们在代码中使用它的方式实际上很难实现。还需要对可能具有 NULL 值的每一列执行此操作,因此如果可以的话,这是我想避免的解决方案
谢谢!