我有一个文件,可以包含3到4列以逗号分隔的数值。空字段位于行末时会被定义为例外:
1,2,3,4,5
1,2,3,,5
1,2,3
下表是在MySQL中创建的:
+ ------- + -------- + ------ + ----- + --------- + ------- +
| 领域 类型 空| 关键 默认值| 额外|
+ ------- + -------- + ------ + ----- + --------- + ------- +
| 一| int(1)| 是的 | NULL | |
| 二| int(1)| 是的 | NULL | |
| 三| int(1)| 是的 | NULL | |
| 四| int(1)| 是的 | NULL | |
| 五| int(1)| 是的 | NULL | |
+ ------- + -------- + ------ + ----- + --------- + ------- +
我正在尝试使用MySQL LOAD命令加载数据:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS
TERMINATED BY "," LINES TERMINATED BY "\n";
结果表:
+ ------ + ------ + ------- + ------ + ------ +
| 一| 二| 三| 四| 五|
+ ------ + ------ + ------- + ------ + ------ +
| 1 | 2 | 3 | 4 | 5 |
| 1 | 2 | 3 | 0 | 5 |
| 1 | 2 | 3 | NULL | NULL |
+ ------ + ------ + ------- + ------ + ------ +
问题在于,当原始数据中的字段为空且未定义时,MySQL由于某种原因不会使用列默认值(为NULL),而是使用零。当字段全部丢失时,正确使用NULL。
不幸的是,在这一阶段,我必须能够区分NULL和0,因此将不胜感激。
谢谢S。
编辑
SHOW WARNINGS的输出:
+ --------- + ------ + -------------------------------- ------------------------ +
| 级别| 代码 留言|
+ --------- + ------ + -------------------------------- ------------------------ +
| 警告| 1366 | 错误的整数值:“”对于第2行的“四”列|
| 警告| 1261 | 第3行未包含所有列的数据|
| 警告| 1261 | 第3行未包含所有列的数据|
+ --------- + ------ + -------------------------------- ------------------------ +
这将做您想要的。它将第四个字段读入局部变量,然后如果该局部变量最终包含空字符串,则将实际字段值设置为NULL:
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语句,如下所示:
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,'')
;
问题内容: 我正在尝试使用Java + Hibernate + Spring将CSV文件加载到mySQL数据库中。我在DAO中使用以下查询来帮助我加载到数据库中: 我有一些想法可以从http://dev.mysql.com/doc/refman/5.1/en/load- data.html 使用它,以及如何从hibernate +spring应用程序将csv文件导入到mysql中? 但是我得到了错
我正在将一个CSV文件中的20000行数据导入Mysql。 CSV中的列与MySQL表中的列的顺序不同。如何自动分配Mysql表列对应的列? 当我执行 此查询将所有数据添加到第一列。 请建议将数据导入Mysql的自动语法。
我从几个csv文件迭代上传节点和边,每个节点类型一个。加载节点工作得很好,但加载边并不总是有效。实际上,有些节点有数字作为标识符--如果是这样的话,所有这种类型的节点都有数字--但加载为字符串,因此创建边失败。手动创建一个边,添加用双引号包装标识符,效果很好。 边缘: 密码命令:
问题内容: 不知道我在这里缺少什么,但是这段代码运行时没有任何错误消息,但是表中没有任何内容。我正在将三列的CSV值加载到mysql表中 如果有人可以看看,将不胜感激。 谢谢。 问题答案: 我认为您必须将所有内容插入。 像这样
我正在研究一个血液供应链的模拟,并创建和导入了一些表来管理各种代理群体的主数据,如血液处理中心、检测中心、医院等。这些表包含所述代理的名称和lat/lon坐标。 这些表都是MySQL数据库的一部分,我用它的接口连接到AnyLogic,正如我所说,导入了这些表。到目前为止还不错,但是,当我想为每个数据库条目创建代理群体并将代理的参数分配到表的各个字段时,AnyLogic不能将名称(在MySQL中为V
对象文件: 零件文件: 用于加载数据的密码命令行: neo4j2.1.7和neo4j2.2.0-M04都存在此问题。