导入带有空字段的 CSV 时出现 MySQL 错误

R. *_*Nec 5 mysql import csv

我有一个带有导出表的 CSV 文件,其中包含不包含值的字段的行。列使用“,”分隔,如果字段没有值,它们看起来像这样:,,,,,, 我尝试使用以下代码加载数据:

LOAD DATA INFILE "C:/table.csv"
INTO TABLE target_table 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
Run Code Online (Sandbox Code Playgroud)

目标表中的列(要加载此 CSV 文件中的数据)可以为空,但服务器返回错误:

"Incorrect integer value"
Run Code Online (Sandbox Code Playgroud)

当我在 CSV 文件中的逗号之间放置 NULL 时,服务器不会返回任何错误。是否可以更改某些设置以在不更改 CSV 文件的情况下加载表?

jyn*_*nus 6

像这样的事情,检查 '' 的每个值,然后插入 NULL,可能会有所帮助。将 a,b,c,d 更改为表中的实际名称和行数:

$ cat /tmp/test.csv 
test1, test2, test3, test4
,,,
1,2,3,4
,,,

mysql> LOAD DATA INFILE "/tmp/test.csv" INTO TABLE test.test  
          FIELDS TERMINATED BY ','  
          OPTIONALLY ENCLOSED BY '"' 
          LINES TERMINATED BY '\n' 
          IGNORE 1 ROWS 
       (@a, @b, @c, @d) 
       SET a = IF(@a = '', NULL, @a), 
           b = IF(@b = '', NULL, @b), 
           c = IF(@c = '', NULL, @c), 
           d = IF(@d = '', NULL, @d);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

mysql> SELECT * FROM test.test;
+------+------+------+------+
| a    | b    | c    | d    |
+------+------+------+------+
| NULL | NULL | NULL | NULL |
|    1 |    2 |    3 |    4 |
| NULL | NULL | NULL | NULL |
+------+------+------+------+
3 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

检查语法以LOAD DATA获取更多详细信息。