MySQL 的LOAD 指令提供了一種將資料從CSV 檔案匯入表的簡單方法。然而,當從包含空字段的 CSV 檔案載入數值資料時,MySQL 傾向於插入零而不是 NULL,即使該列被定義為可空。
考慮以下CSV 檔案(testdata.txt):
1,2,3,4,5 1,2,3,,5 1,2,3
以及以下MySQL 表(moo):
CREATE TABLE moo ( one INT(1) NULL, two INT(1) NULL, three INT(1) NULL, four INT(1) NULL, five INT(1) NULL );
將CSV 資料載入到使用LOAD 指令的moo表:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS TERMINATED BY "," LINES TERMINATED BY "\n";
產生的表將包含:
+------+------+-------+------+------+ | one | two | three | four | five | +------+------+-------+------+------+ | 1 | 2 | 3 | 4 | 5 | | 1 | 2 | 3 | 0 | 5 | | 1 | 2 | 3 | NULL | NULL | +------+------+-------+------+------+
如您所見,MySQL 為空字段分配零,當列允許NULL 時,這是不正確的
要解決此問題並確保將空白欄位正確處理為NULL,請使用NULLIF() 函數。 NULLIF() 有兩個參數:要檢查的欄位和欄位為空時傳回的值。使用方法如下:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS TERMINATED BY "," LINES TERMINATED BY "\n" (one, two, three, @vfour, five) SET four = NULLIF(@vfour,'') ;
在此範例中,第四個欄位被讀入局部變數@vfour。如果 @vfour 是空字串,則 SET 語句將 4 個賦給 NULL。
如果多個欄位可以為空,請將它們全部讀入局部變數並使用多個SET 語句:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS TERMINATED BY "," LINES TERMINATED BY "\n" (@vone, @vtwo, @vthree, @vfour, @vfive) SET one = NULLIF(@vone,''), two = NULLIF(@vtwo,''), three = NULLIF(@vthree,''), four = NULLIF(@vfour,'') ;
透過利用NULLIF(),MySQL LOAD 現在可以正確處理空字段並分配NULL 值,使您能夠準確地處理MySQL 表中的資料。
以上是使用LOAD DATA INFILE將空白欄位的CSV資料匯入MySQL時如何處理NULL值而不是零?的詳細內容。更多資訊請關注PHP中文網其他相關文章!