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

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

Susan Sarandon
發布: 2025-01-04 14:02:39
原創
149 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板