我使用的是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" |
+---------------+------+--------+--------+--------+--------+--------+有没有办法强制将记录2的列a作为字符串导入,而不修改CSV文件?
更新
@Barmar指出,MySQL文档中有一个关于此行为这里的段落
如果被包围的字段不是空的,则将包含文字单词NULL的字段作为其值读取为空值。这与字符括起来的字段中包含的单词NULL不同,该字段被读为字符串'NULL‘。
发布于 2022-01-18 21:06:56
这是记录在案的这里
如果
FIELDS ENCLOSED BY不是空的,则将包含文字单词NULL作为其值的字段读入为NULL值。这与包含在NULL字符中的单词FIELDS ENCLOSED BY不同,后者被读取为字符串'NULL'。
因此,您需要使用类似于FIELDS ENCLOSED BY '"'的内容指定引用字符,然后在CSV文件中写入"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')然而,这并不能区分被写为\N的故意\N与MySQL将NULL视为NULL.
https://stackoverflow.com/questions/70762245
复制相似问题