gpt4 book ai didi

php - 如何在 mysql SELECT ... OUTFILE 语句中与 FIELDS ESCAPED BY 一起处理 NULL 值?当前正在截断 NULL 值

转载 作者:IT王子 更新时间:2023-10-29 00:28:36 27 4
gpt4 key购买 nike

我在使用 MySQL 的 SELECT ... 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 值的每一列完成此操作,因此如果可以的话,我想避免使用此解决方案

谢谢!

最佳答案

我能够成功地将 MySQL 查询结果保存为 CSV 并将它们导入 Excel,如下所示:

  1. 使用表格...

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

...对于 SELECT 语句中的每个列或表达式,都可能返回 NULL (\N)。这将确保 CSV 文件中的 NULL 值显示为正确引用的空字符串,而不是错误引用的\N。您可以指定一个值来表示 NULL,而不是空字符串,例如...

    IFNULL(ColumnA, "~NULL~" ) AS "Column A",
  1. 使用以下 OUTFILE 选项:

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

请注意,ESCAPEED BY 指定一个双引号,ENCLOSED BY 也是如此。我还没有测试 OPTIONALLY ENCLOSED BY 是否会成功,所以我只是将 OPTIONALLY 排除在外。

根据 CSV 规范 - RFC 4180,第 2.7 节,需要在带引号的字段值内使用双引号转义另一个双引号。

关于php - 如何在 mysql SELECT ... OUTFILE 语句中与 FIELDS ESCAPED BY 一起处理 NULL 值?当前正在截断 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4590385/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com