我有一个文件,可以包含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