如何处理mysql select中的空值outfile语句与转义的字段一起使用?当前正在截断空值

s2j5cfk0  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(402)

我在使用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()可能是一个选项,但是我们在代码中使用它的方式实际上很难实现。它还需要为每个可能有空值的列执行,因此如果可以的话,我希望避免使用这种解决方案
谢谢!

3duebb1j

3duebb1j1#

我成功地将mysql查询结果保存为csv,并将其导入excel,如下所示:
使用表单。。。

IFNULL(ColumnA, "" ) AS "Column A",

…对于select语句中的每一列或表达式,可能返回null(\n)。这将确保csv文件中的空值显示为正确引用的空字符串,而不是不正确引用的空字符串。您可以指定一个值来表示null,而不是空字符串,例如。。。

IFNULL(ColumnA, "~NULL~" ) AS "Column A",

使用以下输出文件选项:

FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\r\n'

请注意,escapted by指定了一个双引号,就像括在中一样。我还没有测试optional是否会成功,所以我只是将optional排除在外。
根据csv规范rfc 4180第2.7节的要求,使用双引号转义引号字段值中的另一个双引号。

hivapdat

hivapdat2#

尝试使用 coalesce 函数转换可以 null"" http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce

相关问题