Mysql

導入帶有空欄位的 CSV 時出現 MySQL 錯誤

  • January 8, 2019

我有帶有導出表的 CSV 文件,其中包含不包含值的欄位的行。列使用“,”分隔,如果欄位沒有值,它們看起來像這樣:,,,,,,我嘗試使用以下程式碼載入數據:

LOAD DATA INFILE "C:/table.csv"
INTO TABLE target_table 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS

目標表中的列(將載入此 CSV 文件中的數據)可以為空,但伺服器返回錯誤:

"Incorrect integer value"

當我在 CSV 文件中的逗號之間放置 NULL 時,伺服器不會返回任何錯誤。是否可以在不更改 CSV 文件的情況下更改某些設置以載入表格?

像這樣檢查’‘的每個值,然後插入 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)

檢查語法以LOAD DATA獲取更多詳細資訊。

引用自:https://dba.stackexchange.com/questions/97891