首頁 >資料庫 >mysql教程 >使用LOAD DATA INFILE將空白欄位的CSV資料匯入MySQL時如何處理NULL值而不是零?

使用LOAD DATA INFILE將空白欄位的CSV資料匯入MySQL時如何處理NULL值而不是零?

Susan Sarandon
Susan Sarandon原創
2025-01-04 14:02:39178瀏覽

How Can I Handle NULL Values Instead of Zeros When Importing CSV Data with Empty Fields into MySQL Using LOAD DATA INFILE?

在有空欄位的CSV 中處理MySQL LOAD 中的NULL 值

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn