【发布时间】:2010-03-30 19:18:05
【问题描述】:
我有一个电子邮件表格。
自动增量 ID 的最后一条记录是 3780,这是一条合法记录。我现在插入的任何新记录都被插入到那里。
但是,在我的日志中,我偶尔会遇到:
Query FAIL: INSERT INTO mail.messages (timestamp_queue) VALUES (:time);
Array
(
[0] => 23000
[1] => 1062
[2] => Duplicate entry '4294967295' for key 1
)
不知何故,自动增量跃升至 INT 最大值 4294967295
为什么在上帝的绿色地球上,它会跳得这么高?我没有带有 id 字段的插入。
该表的显示状态,Auto_increment 表现在显示为:4294967296
怎么会发生这样的事情?我意识到 id 字段可能应该是一个大整数,但我担心的是这个东西会以某种方式跳回来。
乔什
编辑:更新
mysql 5.0.45 版红帽补丁
由于我将 id 设置为 BIGINT,所以最后几个 id 看起来像:
3777
3778
3779
3780
4294967295
4294967296
4294967297
4294967298
4294967299
4294967300
如您所见,它们是增量的,没有间隙(到目前为止)。太奇怪了。
【问题讨论】:
-
:time 插入什么样的字段? id 为 4294967296 的行的值是否包含任何线索?
-
什么版本的mysql?您是否阅读过 Google 提供的“关于键 1 的重复条目 '4294967295' 的大约 3,020 个”结果?您是否检查过当前 id 中是否有任何空白?您是否检查过是否真的有 id 为 4294967295 的记录?您确定您的代码没有对此字段进行显式插入/更新以将其设置为-1吗? “最后的记录”是什么意思?最近的?最大身份证?您可以读回当前的插入 ID(我可以在 PMA 中看到),尽管我不知道如何检查它。 C.
-
有一个 ID 为 42xxx 的记录,虽然我不知道它是如何到达那里的,对吧。它的书面 7k 记录超过 3 个月,并且它刚刚呈现。我使用 INSERT ON DUPLICATE KEY UPDATE,它很久以前就有一个涉及自动增量的错误,但它没有跟踪,因为除了一个超级大的之外,id 中没有间隙。
-
timestamp_sent 是一个 INT(10) 值中没有线索。它们都是完整的。我总是使用prepared statements,所以我不担心sql注入。嗯。
-
我想知道字段长度覆盖是否会导致这样的事情。
标签: php mysql pdo auto-increment mysql-error-1062