1

所以表模式看起来像:

field - type - index

'id' - INT - PRI
'event_id' - BIGINT(20) - UNI
co1 ... colN (no indexes)

加载数据命令:

LOAD DATA LOCAL INFILE 'my-file' REPLACE INTO TABLE mydb.mytable (event_id, col1 .. colN)

并得到错误:

ERROR 1062 (23000) at line 1: Duplicate entry '2147483647' for key 1

“key 1”指的是“event_id”上的唯一键。

更多上下文: (1) 加载数据时表为空。(2) 当我在源文件中 grep 2147483647 时,我什么也得不到 (3) 2147483647 是整数最大值 (4) 我实际上并没有在 'id' 中插入任何值——它只是自动递增 (5) 我正在使用LOAD DATA 中的 'REPLACE' 关键字,所以即使有骗子,它应该知道如何处理它们?

这表明存在一些 int 溢出问题(即,我认为源数据或表中没有任何真正的欺骗),并且确实在 'my-file' 中为 'event_id' 的值都超过了整数最大限制. 但是,错误很奇怪,因为“event_id”列是 BIGINT。

作为临时修复,我删除了“event_id”上的唯一索引,并且 LOAD DATA 命令起作用了!'event_id' 中的值都很好,没有被截断或任何东西。所以处理这些值的表没有任何问题,但不知何故 LOAD DATA 正在检查唯一性,但作为一个整数?

有没有人遇到过类似的事情?谢谢

4

2 回答 2

0

所以这意味着“2147483647”已经存在于该数据库中标记为键的字段中。只需从该字段中删除密钥,就可以了!

编辑:如您的问题所述, event_id 是您的主键 - 您不能在主键中两次具有相同的值。

祝你好运!

于 2012-05-24T19:14:18.633 回答
0

问题不在于数据类型,

问题是你只有 2 个字段,一个是 PK,另一个是 UNIQUE,所以你不可能重复一个值。当您进行插入或加载数据时,它会尝试添加两次具有此值“2147483647”的条目,您有多种方法可以修复它。

  • 第一个尝试使用文本编辑器打开文件并找到重复的值并修复它,如果它不起作用,请尝试使用 mysqldump 或 phpmyadmin 导出数据并在文本编辑器中编辑文件。

  • 再次导出,如果问题仍然存在,请尝试通过其他方法(mysqldum 或 phpmyadmin)导出数据并重新导入

  • 尝试重新创建一个没有主键的表,你可以使用这个

    创建表 big_int_test (select * from table1); 它将复制没有 PK、INDEXES 和 FK 的表。

  • 您可以删除索引和 UNIQUE 键约束,导入数据,修复表(删除重复值)并重新创建 PK 和 UNIQUE KEY(这是一种疯狂但它可以工作)

于 2012-05-24T19:26:22.007 回答