从CSV上传MYSQL维护空值

Amb*_*are 6 mysql csv import null

我有一个包含一堆字段的MYSQL数据库,其中许多字段都配置为数值,或者:

thickness double(7,2)DEFAULT NULL,

要么

has_input tinyint(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)


wch*_*ito 7

它可以用同一句话来对待.

鉴于下表:

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)