4

signed int 値 2147483647 を超えた自動インクリメント インデックスで LAST_INSERT_ID を使用しようとしています。この列は unsigned int です。ただし、LAST_INSERT_ID() は無効な負の値を返しています。これを調査したところ、これがこの関数の性質であることを示すいくつかのコメントが見つかりました。しかし、公式に文書化されていることがわかりません。数年前にさかのぼるいくつかのバグ レポートがまだ未解決です。

したがって、これが実際に既知のバグであるかどうか、および/またはこれについて何かできることがあるかどうかを知る必要があります。mySQL を新しいバージョンにアップグレードする必要がありますか?

4

2 に答える 2

0

これについては 100% 確信が持てませんが、ID だけが必要であり、それに対して数学演算を行う必要がないので、おそらくそれを文字列として処理し、select ステートメントで数値を文字列に変換することができますか?

于 2010-11-17T20:24:39.157 に答える
0

質問のコメントからPHPを使用していると思います。(現在、「php」関連としてタグ付けされていません)。ここに 2 セント追加します

signed int 値 2147483647 を超えた自動インクリメント インデックスで LAST_INSERT_ID を使用しようとしています。この列は unsigned int です。ただし、LAST_INSERT_ID() は無効な負の値を返しています。これを調査したところ、これがこの関数の性質であることを示すいくつかのコメントが見つかりました。しかし、公式に文書化されていることがわかりません。数年前にさかのぼるいくつかのバグ レポートがまだ未解決です。

mySQLLAST_INSERT_ID関数は、列 (​​現在の接続)の最新のINSERTからIDを返すため、列があなたが言ったようなものである場合、 2147483647より大きい値を返す可能性があります。これは正しい動作です。AUTO_INCREMENTINTEGER UNSIGNED

したがって、これが実際に既知のバグであるかどうか、および/またはこれについて何かできることがあるかどうかを知る必要があります。mySQL を新しいバージョンにアップグレードする必要がありますか?

mySQL データ型は、PHPで使用するために選択した表現とはほとんど関係がないため、問題はmySQLサーバーにはありません。PHPインストールが非常に大きな数値を処理できない場合は、それをstring(Shadow Radiance によると) として扱うことができます。

于 2010-11-30T20:01:56.327 に答える