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