我有一张电子邮件表。
自动增量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 patched
因为我将id设置为BIGINT,所以最后几个id看起来像是:
3777
3778
3779
3780
4294967295
4294967296
4294967297
4294967298
4294967299
4294967300
正如您所看到的,它们是递增的,没有间隙(到目前为止)。非常奇怪。
答案 0 :(得分:5)
我在完全相同的号码上遇到了同样的问题。我的问题是,当我将其更改为int(10)
时,我在bigint(20)
上显示了该字段,它解决了我的问题。
如果其他人遇到此问题。首先检查字段大小。 :)
答案 1 :(得分:2)
我仍然不完全清楚这里发生了什么,但我想我会跟进。
在我的持久性引擎中,我有一种带有自动增量ID的对象,以及一个带有GUID id的子类。
显然这两者是不相容的。我有理由将对象转换为其父对象然后保存它(基本上子类是一个具有附加功能的电子邮件TEMPLATE,但是当我想实际发送电子邮件时,我将其转换为父对象并将其保存到常规外发邮件队列)。愚蠢的是,我没有意识到id格式不同。这导致尝试将带有36个字符长字符串的记录插入到int中。字符串在准备好的语句中解析为'0',无论出于何种原因,这会导致自动递增系统WIG OUT并最大化原始表上的INT自动递增id字段。
长话短说,我保留原木的好事。
约什
答案 2 :(得分:0)
通过phpmyadmin,您可以使用该表的操作选项卡更改最后一个ID
答案 3 :(得分:0)
这实际上也发生在我身上(仍不确定为什么)。我做了一个预感:
ALTER TABLE `{table name here}` AUTO_INCREMENT = {your number here};
FLUSH TABLE `{table name here}`;
似乎已经修复了它。首先我尝试首先设置自动增量值,但它又回到4294967295.再次,不知道为什么更改增量值和刷新工作(我不是数据库人),但我想我会在这里发布它,因为它可以帮助别人。
答案 4 :(得分:0)
当您意外插入新记录并提供auto_increment值时,通常会发生这种情况。
大部分时间都是因为您有一个名称相似的列,并且您输入的拼写错误导致auto_increment值更新为您提供的值,如果您提供的是字符串而不是字符串,则为4294967295中间体
解决这个问题:
select max(autoincrementColumNameHere) from tableNameHere
ALTER TABLE tableNameHere AUTO_INCREMENT = (maxValue+1)
答案 5 :(得分:-1)
只需将其更改为BIGINT即可创建“一些”额外的新记录。几千亿......;)
答案 6 :(得分:-1)
它也发生在我身上。问题是愚蠢的。
如果收到character string
,则会将其0
转换为integer, as in my case, where i was trying to insert a mobile no (in india it's 10 digits and starts with 9 like
9123456789 ) into a
int`类型列。
但是,signed int
的限制为2147483647
。
我尝试将其转换为unsigned
,但仍然限制为4294967295
。因此错误“4294967295”的东西,但是当我将其转换为bigint
时,其限制为9223372036854775807
(对于10位数的移动设备更多),它开始接受它。
为了移动设备,我没有将其转换为unsigned
,将其限制增加到18446744073709551615
。