MySQL中的加载数据失败

问题描述 投票:1回答:1

我正在尝试将csv文件中的数据加载到MySQL中的表中。尽管一切似乎都还不错,但是由于某种原因它对我不起作用,而我的团队成员却能够成功加载它。我们都有相同的表定义和数据。

我的表定义如下图所示

   CREATE TABLE SIGNS ( 
   ROW_ID MEDIUMINT UNSIGNED NOT NULL,
   SUBJECT_ID MEDIUMINT UNSIGNED NOT NULL,
   Test_ID MEDIUMINT UNSIGNED NOT NULL,
   Name_ID TINYINT UNSIGNED NOT NULL,
   date_ID TINYINT UNSIGNED NOT NULL,
   race_NO MEDIUMINT UNSIGNED NOT NULL,
   MO_TIME DATETIME NOT NULL,
   ITEMID VARCHAR(255) NOT NULL,
   VALUE SMALLINT UNSIGNED NOT NULL,
  UNIQUE KEY SIGNS_ROW_ID (ROW_ID)
  )
  CHARACTER SET = UTF8;

我在csv文件中有一个数据,当我上载它时,可以很好地处理80条记录。但是大约20条记录会引发以下错误。

有时,我收到错误消息Out of range value for column 'VALUE' at row 438575

enter image description here

有时我会得到Data Truncated for column 'MO_TIME' at row 1,1265

如您所见,这非常不一致。但是数据没有问题,因为它对我的团队成员来说效果很好。它与约束/索引有关系吗?

我也遇到了其他表格的类似奇怪问题。但是我删节了表并再次加载它,它工作正常。

我在这里尝试了同样的方法,但是没有帮助

mysql sql mysql-workbench mysql-error-1064
1个回答
1
投票

您的值列是SMALLINT UNSIGNED。在聊天中,您说它在警告超出范围值的行中被插入为0。

看到我做过的这项测试:

mysql> create table t ( i smallint unsigned);
Query OK, 0 rows affected (0.04 sec)

mysql> insert into t set i = -150;
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> show warnings;
+---------+------+--------------------------------------------+
| Level   | Code | Message                                    |
+---------+------+--------------------------------------------+
| Warning | 1264 | Out of range value for column 'i' at row 1 |
+---------+------+--------------------------------------------+
1 row in set (0.00 sec)

mysql> select * from t;
+------+
| i    |
+------+
|    0 |
+------+

如果尝试将负值插入smallint无符号列,则该值超出了无符号支持的范围。它被截断为0,因为无符号数字类型仅支持非负值。

如果您尝试插入无效值,则日期时间会发生类似的情况。例如,一个常见的错误是使用MM / DD / YYYY格式的日期,而MySQL不支持这种格式:

mysql> create table t2 (mo_time datetime);
Query OK, 0 rows affected (0.04 sec)

mysql> insert into t2 set mo_time = '10/31/2019';
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> show warnings;
+---------+------+----------------------------------------------+
| Level   | Code | Message                                      |
+---------+------+----------------------------------------------+
| Warning | 1265 | Data truncated for column 'mo_time' at row 1 |
+---------+------+----------------------------------------------+

显示与您相同的错误消息。

mysql> select * from t2;
+---------------------+
| mo_time             |
+---------------------+
| 0000-00-00 00:00:00 |
+---------------------+

啊哈,曾经是默认值的无意义的日期值。幸运的是,在最新版本的MySQL中,它被禁止。

MySQL仅支持YYYY-MM-DD格式。实际上,各部分之间的标点是可选的。有关详细信息,请参见https://dev.mysql.com/doc/refman/8.0/en/date-and-time-literals.html

© www.soinside.com 2019 - 2024. All rights reserved.