我有一大堆电子邮件。
自动增量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字段可能应该是一个大的int,但我担心的是这个东西不知何故会跳回来。
乔希
编辑:更新
mysql版本5.0.45 red hat已修补
由于我将id设置为BIGINT,所以最后几个id如下所示:
3777
3778
3779
3780
4294967295
4294967296
4294967297
4294967298
4294967299
4294967300正如您所看到的,它们是增量的,(到目前为止)没有差距。太奇怪了。
发布于 2010-03-31 07:50:28
我还不完全清楚这里发生了什么,但我想我会跟进的。
在我的持久性引擎中,我有一个具有自动增量id的对象类型,以及一个具有GUID的子类。
显然,这两者是不相容的。我有理由将对象转换为其父对象,然后保存它(基本上,子类是一个具有附加功能的电子邮件模板,但当我想实际发送电子邮件时,我将其转换为父对象并将其保存到常规的外发邮件队列中)。愚蠢的是,我没有意识到id格式是不同的。这导致尝试将长度为36个字符的字符串的记录插入到int中。字符串在准备好的语句中解析为'0‘,无论出于什么原因,这都会导致自动增量系统损坏,并在原始表上最大限度地耗尽INT自动增量id字段。
长话短说,幸好我在记录日志。
乔希
发布于 2012-08-08 15:29:40
我用完全相同的数字也遇到了同样的问题。我的问题是,当我将字段改为bigint(20)时,我在int(10)上设置了该字段,这就解决了我的问题。
如果其他人也有这个问题。首先检查您的字段大小。:)
发布于 2018-05-21 17:28:19
当您意外插入新记录并提供auto_increment值时,通常会发生这种情况。
大多数情况下,这是因为您有一个名称类似的列,并且输入错误导致auto_increment值更新为您提供的值,如果您提供的是字符串而不是int值,则为4294967295。
要解决此问题,请执行以下操作:
检查最大增量值是多少
从tableNameHere中选择最大值(AutoincrementColumNameHere)
更新您的AUTO_INCREMENT值
ALTER TABLE tableNameHere AUTO_INCREMENT = (maxValue+1)
https://stackoverflow.com/questions/2548003
复制相似问题