Amb*_*are 6 mysql csv import null
我有一个包含一堆字段的MYSQL数据库,其中许多字段都配置为数值,或者:
thicknessdouble(7,2)DEFAULT NULL,
要么
has_inputtinyint(4)DEFAULT NULL,
我必须将csv文件导入此表并一直在使用
将数据本地infile'myfilepath/file.csv'加载到
combined以',''括起的表格字段中,用"\n"排列的'\''行'
但是所有数字字段都将零值替换为零.这真的很烦人,因为有些字段的合法值为零,我需要能够将这些字段与没有值的字段区分开来.
如您所见,字段默认值设置为null,在其他建议中,我在csv的所有空白字段中输入\ N以指示null.
尽管如此,空值仍然被零替换.你能帮我吗?
Syl*_*oux 11
由于在导入CSV时处理NULL列的规则相当复杂,因此在LOAD DATA INFILE的doc中有一个关于处理NULL值的专用部分:http:
//dev.mysql.com/doc/refman/5.1/en/load -data.html
在您的具体情况:
如果FIELDS ENCLOSED BY不为空,则包含字面值NULL作为其值的字段将被读取为NULL值.这与FIELDS ENCLOSED BY字符中包含的单词NULL不同,后者被读作字符串'NULL'.
尝试通过单词NULL(不带引号)替换缺失值来预处理CSV文件.
如果您在原始CSV文件中有类似的内容:
0,1,2,,5
Run Code Online (Sandbox Code Playgroud)
它应该像这样转换,以便MySQL在第4列中正确插入NULL:
0,1,2,NULL,5
Run Code Online (Sandbox Code Playgroud)
它可以用同一句话来对待.
鉴于下表:
CREATE TABLE `testcsv` (
`col0` INT(11) NOT NULL,
`col1` VARCHAR(20) DEFAULT NULL,
`col2` DECIMAL(5,2) DEFAULT NULL
);
Run Code Online (Sandbox Code Playgroud)
和以下文件.csv:test.csv
1,\N,0
2,"string",102.20
3,\N,
4,"string",\N
5,"string",NULL
6,"string",
Run Code Online (Sandbox Code Playgroud)
跑步:
LOAD DATA INFILE 'path/test.csv' INTO TABLE `testcsv`
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
(`col0`, `col1`, @col2)
SET `col2` = IF(CHAR_LENGTH(TRIM(@col2)) = 0, NULL, @col2);
Run Code Online (Sandbox Code Playgroud)
结果:
mysql> SELECT `col0`, `col1`, `col2` FROM `testcsv`;
+------+--------+--------+
| col0 | col1 | col2 |
+------+--------+--------+
| 1 | NULL | 0.00 |
| 2 | string | 102.20 |
| 3 | NULL | NULL |
| 4 | string | NULL |
| 5 | string | NULL |
| 6 | string | NULL |
+------+--------+--------+
6 ROWS IN SET (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25262 次 |
| 最近记录: |