首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL "LOAD DATA INFILE“将未引号的"NULL”字符串导入为‘NULL’

问MySQL "LOAD DATA INFILE“将未引号的"NULL”字符串导入为‘NULL’
EN

Stack Overflow用户
提问于 2022-01-18 20:54:09
回答 1查看 409关注 0票数 0

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

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

代码语言:javascript
复制
record_number,a,b,c,d,e,f
1,1,2,3,4,5,6
2,NULL,null,Null,nUlL,,"NULL"

导入的表将具有以下值:

代码语言:javascript
复制
+---------------+------+--------+--------+--------+--------+--------+
| record_number | a    | b      | c      | d      | e      | f      |
+---------------+------+--------+--------+--------+--------+--------+
|             1 | 1    | 2      | 3      | 4      | 5      | 6      |
|             2 | NULL | "null" | "Null" | "nUlL" | ""     | "NULL" |
+---------------+------+--------+--------+--------+--------+--------+

有没有办法强制将记录2的列a作为字符串导入,而不修改CSV文件?

更新

@Barmar指出,MySQL文档中有一个关于此行为这里的段落

如果被包围的字段不是空的,则将包含文字单词NULL的字段作为其值读取为空值。这与字符括起来的字段中包含的单词NULL不同,该字段被读为字符串'NULL‘。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-18 21:06:56

这是记录在案的这里

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

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

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

代码语言:javascript
复制
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')

然而,这并不能区分被写为\N的故意\N与MySQL将NULL视为NULL.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70762245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档