我有一個文件,可以包含3到4列數值,用逗號分隔。空字段與例外規定,當他們在該行的末尾:MySQL從CSV數據加載NULL值
1,2,3,4,5
1,2,3,,5
1,2,3
下表在MySQL創建:
+-------+--------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------+------+-----+---------+-------+ | one | int(1) | YES | | NULL | | | two | int(1) | YES | | NULL | | | three | int(1) | YES | | NULL | | | four | int(1) | YES | | NULL | | | five | int(1) | YES | | NULL | | +-------+--------+------+-----+---------+-------+
我試圖加載使用MySQL LOAD命令數據:
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正確使用。
不幸的是,我必須能夠在這個階段區分NULL和0,所以任何幫助將不勝感激。
感謝 S.
編輯
顯示的警告輸出:
+---------+------+--------------------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------------------+ | Warning | 1366 | Incorrect integer value: '' for column 'four' at row 2 | | Warning | 1261 | Row 3 doesn't contain data for all columns | | Warning | 1261 | Row 3 doesn't contain data for all columns | +---------+------+--------------------------------------------------------+
是否對性能有影響? – Blacksonic 2013-04-18 07:48:37
理論上,我想 - 但它全部在內存中,只能保存少量數據每行,所以我想它會是無限小的;但是如果你認爲這可能是一個問題,你應該測試它。 – 2013-04-19 03:00:32
我真的很喜歡這個答案。用戶在下載csv時可以看到空字符串(在'SELECT INTO OUTFILE'查詢中使用'IFNULL(Col,'')')來查看excel,然後上傳接受它們爲null,而不必處理'\ N '在csv中。謝謝! – chrisan 2013-09-29 15:47:28