我在使用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要求将列中的'''字符写为''''进行转义。
包含由子句转义的字段修复了excel中包含双引号字符的列的问题,但是它会打断空列。空列导出为(…“n,…)列上缺少反斜杠和尾部引号。在excel中,由于缺少右引号,这会导致多列相互折叠。
我的目标是能够导出包含双引号和换行符的列,以及将空列导出为\n,但是我似乎不知道如何做。mysql docs指出,由转义的字段会影响空列的输出方式,但我无法理解“'”的转义序列如何导致在空列上删除反斜杠和尾随引号
目前,我的解决方案是在将每一行输出给用户时,通过使用转义的字段对其执行字符串替换,并将“n”替换为“'\n”,”。这似乎管用,但感觉不对,我担心这会引起一些问题
select列上的ifnull()可能是一个选项,但是我们在代码中使用它的方式实际上很难实现。它还需要为每个可能有空值的列执行,因此如果可以的话,我希望避免使用这种解决方案
谢谢!
2条答案
按热度按时间3duebb1j1#
我成功地将mysql查询结果保存为csv,并将其导入excel,如下所示:
使用表单。。。
…对于select语句中的每一列或表达式,可能返回null(\n)。这将确保csv文件中的空值显示为正确引用的空字符串,而不是不正确引用的空字符串。您可以指定一个值来表示null,而不是空字符串,例如。。。
使用以下输出文件选项:
请注意,escapted by指定了一个双引号,就像括在中一样。我还没有测试optional是否会成功,所以我只是将optional排除在外。
根据csv规范rfc 4180第2.7节的要求,使用双引号转义引号字段值中的另一个双引号。
hivapdat2#
尝试使用
coalesce
函数转换可以null
至""
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce