mySQL otomatik artış sorun: 1 tuşu için giriş '4294967295 'çoğaltın

6 Cevap php

Ben e-postaların bir tablo var.

Bir otomatik artış kimliği için orada son kayıt okunaklı bir rekor olan 3780 olduğunu. Ben şimdi taktığınız herhangi bir yeni kayıt hakkı var sokulmaktadır.

Ancak, benim günlükleri ben zaman var:

Query FAIL: INSERT INTO mail.messages (timestamp_queue) VALUES (:time);
Array
(
    [0] => 23000
    [1] => 1062
    [2] => Duplicate entry '4294967295' for key 1
)

Her nasılsa, değiştirmemesi 4294967295 arasında INT max fırladı

Neden Tanrı'nın yeşil dünya üzerinde bu kadar yüksek atladı olsun istiyorsunuz? Ben bir id alanı ile hiçbir ekler var.

Bu tablo için gösteri durum, AUTO_INCREMENT tablo şimdi okur: 4294967296

Nasıl böyle bir şey meydana gelebilir? Ben id alan belki de büyük bir int olmalı farkındayım, ama ben endişe nedense bu şey geri atlar olmasıdır.

Şaka

Edit: Update

yamalı mysql sürümü 5.0.45 kırmızı şapka

Ben bigint id set yana id en son birkaç benziyor:

3777
3778
3779
3780
4294967295
4294967296
4294967297
4294967298
4294967299
4294967300

Gördüğünüz gibi, onlar (şimdiye kadar) hiç boşluk ile artan vardır. Tamamen garip.

6 Cevap

Onun hala bana tamamen açık değil burada oldu, ama ben takip ediyorum düşündüm.

Benim kalıcılık motor, ben tek bir otomatik artış kimliği ile nesnenin türü ve bir GUID kimliği ile bir alt sınıf vardı.

Açıkçası iki bağdaşmamaktadır. Ben onun ebeveyne nesneyi dönüştürmek ve sonra (temelde alt sınıf, ek işlevselliği olan bir e-posta TEMPLATE, ama ben aslında e-posta göndermek istediğiniz zaman, ben üst nesnesine dönüştürmek ve bunu kaydetmek kaydetmek için bir neden var Düzenli giden posta kuyruğu). Aptalca, ben id biçimleri farklı olduğunu fark etmedi. Bu bir int içine 36 karakterlik uzun bir dize ile bir kayıt eklemek için çalışıyor sonuçlandı. Dize hazır açıklamada ve hangi sebeple olursa olsun '0 'karar bu otomatik artış sistemi orijinal masaya INT otomatik artış id alanı dışında OUT peruk ve max neden olur.

Uzun lafın kısası, iyi bir şey günlükleri tutmak oldu.

Şaka

Ben aynı numara ile aynı problem vardı. Benim sorunum bigint(20) benim sorunum çözüldü olarak değiştirdim zaman int(10) üzerine alan vardı.

Başkalarının bu sorunu yaşıyorsanız. Ilk alan boyutunu kontrol edin. :)

Bu aslında sadece bana çok oldu (hala emin değilim neden). Bir önsezi yaptım:

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

ve bunu sabit gibi görünüyor. Öncelikle ben sadece ilk otomatik artış değerini ayarlama denedim ama geri 4294967295 gitti. Yine, emin değilim artış değerini ve kızarma değişen neden (bir veritabanı adam değilim) çalıştı, ama ben bunu burada bu yazı düşündüm başkalarına yardımcı olabilir.

phpmyadmin basitçe bu tablonun işlemleri sekmesi ile son id değiştirebilirsiniz

Sadece bir BIGINT olarak değiştirin ve "bazı" ekstra yeni kayıtlar oluşturabilirsiniz. Yüz milyar bir çift ... ;)

Bu bana da oldu. Sorun bir aptal biridir.

Bu alırsa bir character string bunu dönüştürür 0 ve eğer 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 `türü sütun.

Ancak, için sınır signed int olan 2147483647.

I unsigned dönüştürerek çalıştı, ama yine sınırı 4294967295 olduğunu. Böylece hatası "4294967295" bir şey, ama ben bigint, (fazla 10 basamaklı cep yok olan) 9223372036854775807 bir sınırı vardır ki onu dönüştürülür zaman, onu kabul etmeye başlamıştır.

Mobil NO uğruna ben 18446744073709551615 onun sınırı arttı ki unsigned onu dönüştürülür.