2010-03-30 112 views
1

我有一個電子郵件表。mySQL自動增量問題:重複條目'4294967295'爲鍵1

自動增量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

爲什麼在上帝的綠色地球會變成這樣GET跳起來如此之高?我沒有帶有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 

由於你可以看到,它們是漸進式的,沒有空隙(到目前爲止)。非常奇怪。

+0

什麼樣的字段是:時間插入? 是否有任何線索中包含的行的值是4294967296? – Cups 2010-03-30 19:46:42

+0

timestamp_sent是一個INT(10) 值中沒有線索。他們都是完整的。我總是使用準備好的語句,所以我不擔心sql注入。嗯。 – Josh 2010-03-30 20:36:39

+0

我不知道如果字段長度覆蓋可能會導致這樣的事情。 – Josh 2010-03-30 20:41:09

回答

2

它仍然不完全清楚我在這裏發生了什麼,但我想我會跟進。

在我的持久性引擎中,我有一種帶有自動增量ID的對象和一個帶有GUID ID的子類。

顯然這兩者是不相容的。我有一個理由將對象轉換爲父對象然後保存它(基本上,子類是一個具有附加功能的電子郵件模板,但是當我想要實際發送電子郵件時,我將它轉換爲父對象並將其保存到常規傳出郵件隊列)。愚蠢的是,我沒有意識到id格式是不同的。這導致試圖將一個長度爲36個字符的字符串插入到一個int中。在準備語句中解析爲'0'的字符串,無論出於何種原因,這會導致自動遞增系統WIG OUT並最大化原始表上的INT自動遞增ID字段。

長話短說,好東西我是保持日誌。

喬希

-1

只需將其更改爲BIGINT,即可創建「一些」額外的新記錄。幾千億...;)

0

通過簡單的phpmyadmin你可以改變最後一個ID,與該表

0

這實際上只是對我來說太(仍然不知道爲什麼)的操作選項卡。在我的預感:

ALTER TABLE `{table name here}` AUTO_INCREMENT = {your number here}; 
FLUSH TABLE `{table name here}`; 

它似乎已經修復它。首先我試着先設置自動增量值,但它回到4294967295。再次,不知道爲什麼改變增量值和刷新工作(我不是數據庫人員),但我想我會在這裏發佈它,因爲它可能會幫助其他人。

4

我有同樣的問題,完全相同的數字。我的問題是,當我將其更改爲bigint(20)時,我在int(10)上的字段解決了我的問題。

如果別人有這個問題。首先檢查您的字段大小。 :)

-2

它也發生在我身上。問題是一個愚蠢的問題。

如果它接收到一個character string其轉換它0並且如果 int`類型列。

但是,signed int的限制爲2147483647

我試過將它轉換爲unsigned,但仍然是極限4294967295。因此,錯誤「4294967295」的東西,但當我把它轉換爲bigint,其中有9223372036854775807(這是更多的10位數手機號碼)的限制,它開始接受它。

爲了移動的目的,我把它轉換成了unsigned,它的限制增加到18446744073709551615