【问题标题】:MySQL "LOAD DATA INFILE" is importing unquoted "NULL" string as `NULL`MySQL "LOAD DATA INFILE" 正在将未引用的 "NULL" 字符串导入为 `NULL`
【发布时间】:2022-01-18 20:54:09
【问题描述】:

我使用的是 MySQL 5.7.35。如果我在 CSV 文件中使用 LOAD DATA INFILE 命令,其中 NULL 作为 CSV 文件中未引用的字符串值,则该值在 MySQL 中导入为 NULL

例如,如果我导入具有以下内容的 CSV 文件:

record_number,a,b,c,d,e,f
1,1,2,3,4,5,6
2,NULL,null,Null,nUlL,,"NULL"

导入的表将具有以下值:

+---------------+------+--------+--------+--------+--------+--------+
| record_number | a    | b      | c      | d      | e      | f      |
+---------------+------+--------+--------+--------+--------+--------+
|             1 | 1    | 2      | 3      | 4      | 5      | 6      |
|             2 | NULL | "null" | "Null" | "nUlL" | ""     | "NULL" |
+---------------+------+--------+--------+--------+--------+--------+

有没有什么办法可以在不修改 CSV 文件的情况下强制将 a 列记录 2 作为字符串导入?

更新

@Barmar 指出 MySQL 文档中有一段关于这种行为 here:

如果 FIELDS ENCLOSED BY 不为空,则包含文字的字段 word NULL 作为其值被读取为 NULL 值。这不同于 包含在 FIELDS ENCLOSED BY 字符中的单词 NULL,读取 作为字符串'NULL'。

【问题讨论】:

    标签: mysql csv null


    【解决方案1】:

    这是记录在here

    如果FIELDS ENCLOSED BY 不为空,则包含文字词NULL 作为其值的字段将被读取为NULL 值。这与包含在FIELDS ENCLOSED BY 字符中的单词NULL 不同,后者被读取为字符串'NULL'

    因此,您需要使用 FIELDS ENCLOSED BY '"' 之类的内容指定引用字符,然后在 CSV 文件中写入 "NULL"

    您可以检查代码中的 NULL 值并将其转换为字符串。

    LOAD DATA INFILE 'file.txt'
      INTO TABLE t1
      (record_number, @a, @b, @c, @d, @e, @f)
      SET a = IFNULL(@a, 'NULL'),
          b = IFNULL(@b, 'NULL'),
          c = IFNULL(@c, 'NULL'),
          d = IFNULL(@d, 'NULL'),
          e = IFNULL(@e, 'NULL'),
          f = IFNULL(@f, 'NULL')
    

    但是,这无法区分故意写为\NNULL 和MySQL 将NULL 视为NULL.

    【讨论】:

    • 啊,我明白了。因此,没有办法将 NULL 作为字符串导入,而不是将其包含在使用FIELDS ENCLOSED BY 子句指定的任何字符序列中?如果是这样,那真是令人失望。我经常无法控制正在导入的 CSV 文件。
    • 我已经更新了答案,展示了如何使用用户变量来检查它。
    • 您已更新建议看起来像是一个不错的候选解决方案。唯一的潜在问题是如果一个字段包含\N 并且它被转换为"NULL"。感谢您的帮助!
    • 是的,我认为没有完整的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    相关资源
    最近更新 更多