我正在使用 MySQL 5.7.35。如果我LOAD DATA INFILE在 CSV 檔案中使用 NULL 作為 CSV 檔案中不帶引號的字串值的命令,則該值將像NULL在 MySQL 中一樣匯入。
例如,如果我匯入具有以下內容的 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 檔案中有一段關于此行為的段落:
如果 FIELDS ENCLOSED BY 不為空,則將包含文字 NULL 作為其值的欄位讀取為 NULL 值。這與包含在 FIELDS ENCLOSED BY 字符中的單詞 NULL 不同,后者被讀取為字串“NULL”。
uj5u.com熱心網友回復:
這記錄在這里:
如果
FIELDS ENCLOSED BY不為空,則將包含文字NULL作為其值的欄位作為值讀取NULL。這與NULL包含在FIELDS ENCLOSED BY字符中的單詞不同,后者被讀取為 string'NULL'。
所以你需要用類似的東西指定參考字符,FIELDS ENCLOSED BY '"'然后寫入"NULL"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')
但是,這無法區分故意NULL寫為\N和 MySQLNULL視為NULL.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/414857.html
標籤:
上一篇:如何取消資料框中的特定日期?
下一篇:CSV讀入MySQLdb失敗
