首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MySQL从CSV数据中加载NULL值?

MySQL从CSV数据中加载NULL值?
EN

Stack Overflow用户
提问于 2018-01-22 00:38:08
回答 2查看 0关注 0票数 0

我有这样一个文件,:

代码语言:javascript
复制
1,2,3,4,5
1,2,3,,5
1,2,3

下表是在MySQL中创建的:

代码语言:javascript
复制
+-------+--------+------+-----+---------+-------+
Field | Type   | Null | Key | Default | Extra |
+-------+--------+------+-----+---------+-------+
| 一个| int(1)| 是| | NULL | |
| 两个| int(1)| 是| | NULL | |
| 三| | int(1)| 是| | NULL | |
| 四| int(1)| 是| | NULL | |
| 五| int(1)| 是| | NULL | |
+-------+--------+------+-----+---------+-------+

我使用MySQL LOAD命令加载数据:

代码语言:javascript
复制
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS 
TERMINATED BY "," LINES TERMINATED BY "\n";

结果表格:

代码语言:javascript
复制
+------+------+-------+------+------+
| 一个| 两个| 三| | 四| 五|
+------+------+-------+------+------+
|    1 |    2 |     3 |    4 |    5 | 
|    1 |    2 |     3 |    0 |    5 | 
| 1 | 2 | 3 | NULL | NULL |
+------+------+-------+------+------+

问题在于,当一个字段在原始数据中是空的而且没有被定义时,MySQL由于某种原因不使用列的默认值(它是NULL)并且使用零。当字段一起缺失时,NULL正确使用。

EN

回答 2

Stack Overflow用户

发布于 2018-01-22 08:52:49

这将做你想要的。它将第四个字段读入局部变量,然后将实际字段值设置为NULL,如果局部变量最终包含空字符串:

代码语言:javascript
复制
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,'')
;

如果它们都可能是空的,那么你可以将它们全部读入变量,并有多个SET语句,如下所示:

代码语言:javascript
复制
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,'')
;
票数 0
EN

Stack Overflow用户

发布于 2018-01-22 09:53:27

需要用\ N替换这个空格:

代码语言:javascript
复制
1,2,3,4,5
1,2,3,\N,5
1,2,3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档