所以表模式看起来像:
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 正在检查唯一性,但作为一个整数?
有没有人遇到过类似的事情?谢谢