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
)

どういうわけか、自動インクリメントは4294967295のINT最大値に跳ね上がりました

なぜ神の緑の地球でこれがそんなに高く跳ね上がるのでしょうか?idフィールドのある挿入物はありません。

そのテーブルの表示ステータス、Auto_incrementテーブルは次のようになります:4294967296

このようなことがどのように発生する可能性がありますか?idフィールドはおそらく大きな整数であるはずですが、私が心配しているのは、どういうわけかこのことが元に戻ることです。

ジョシュ

編集:更新

mysqlバージョン5.0.45レッドハットパッチ

IDをBIGINTに設定したので、最後のいくつかのIDは次のようになります。

3777
3778
3779
3780
4294967295
4294967296
4294967297
4294967298
4294967299
4294967300

ご覧のとおり、これらは増分であり、ギャップはありません(これまでのところ)。完全に奇妙です。

4

7 に答える 7

5

まったく同じ番号で同じ問題が発生しました。私の問題は、フィールドint(10)を変更したときにフィールドがオンになっていbigint(20)て、問題が解決したことでした。

他の人がこの問題を抱えている場合。最初にフィールドサイズを確認してください。:)

于 2012-08-08T07:29:40.083 に答える
2

ここで何が起こったのかはまだ完全にはわかりませんが、フォローアップしたいと思いました。

永続化エンジンには、自動インクリメントIDを持つ1つのタイプのオブジェクトと、GUIDIDを持つサブクラスがありました。

明らかに、2つは互換性がありませんでした。オブジェクトを親に変換して保存する理由があります(基本的に、サブクラスは追加機能を備えた電子メールTEMPLATEですが、実際に電子メールを送信する場合は、親オブジェクトに変換して保存します通常の送信メールキュー)。愚かなことに、idの形式が違うことに気づきませんでした。その結果、36文字の長さの文字列を含むレコードをintに挿入しようとしました。プリペアドステートメントで文字列が「0」に解決されました。これにより、何らかの理由で自動インクリメントシステムがWIG OUTになり、元のテーブルのINT自動インクリメントIDフィールドが最大になります。

簡単に言えば、ログを保持していたのは良いことです。

ジョシュ

于 2010-03-30T23:50:27.757 に答える
1

これは通常、誤って新しいレコードを挿入し、auto_increment値を指定した場合に発生します。

ほとんどの場合、同じような名前の列があり、auto_increment値が指定した値で更新されるタイプミスをしたためです。これは、intの代わりに文字列を指定した場合は4294967295です。

これを解決するには:

  • PK値が4294967295のレコードを削除します。
  • 実行して最大増分値を確認します
select max(autoincrementColumNameHere) from tableNameHere
  • を実行してAUTO_INCREMENT値を更新します
 ALTER TABLE tableNameHere AUTO_INCREMENT = (maxValue+1)
于 2018-05-21T09:28:19.460 に答える
0

phpmyadminを使用すると、そのテーブルの[操作]タブで最後のIDを変更できます。

于 2010-05-20T14:42:22.777 に答える
0

これは実際に私にも起こりました(まだ理由はわかりません)。思い切って:

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

そしてそれはそれを修正したようです。最初に自動増分値を最初に設定しようとしましたが、4294967295に戻りました。繰り返しますが、増分値の変更とフラッシュが機能した理由はわかりませんが(私はデータベース担当者ではありません)、これをここに投稿すると思いました。他の人を助けるかもしれません。

于 2011-11-21T14:43:39.693 に答える
-1

それは私にも起こりました。問題はばかげたものです。

受信した場合はcharacter string変換し0integer, as in my case, where i was trying to insert a mobile no (in india it's 10 digits and starts with 9 like9123456789int`) into aタイプの列の場合。

ただし、の制限はsigned intです2147483647

に変換してみましたunsignedが、それでも限界は4294967295です。したがって、エラー「4294967295」が発生しますbigintが、制限のある9223372036854775807(10桁の携帯電話番号の場合はそれ以上)に変換すると、受け入れ始めました。

モバイルのために、私はそれを変換しunsigned、その制限をに増やしました18446744073709551615

于 2012-10-30T20:17:58.907 に答える
-1

それをBIGINTに変更するだけで、「いくつかの」追加の新しいレコードを作成できます。数千億...;)

于 2010-03-30T19:21:42.140 に答える