プロが教えるわが家の防犯対策術!

'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2147483647' for key 'hoge'

・「Duplicate entry」と表示されたので重複エラーかと思ったのですが、コードを見ても良く分かりませんでした
・そこで再度検索したら、「'2147483647'」まで含む同じエラーが幾つかヒットしました
https://www.google.co.jp/search?q=Fatal+error%3A …

■質問
・エラーの意味を教えてください
・「'2147483647'」には何か特別な意味があるのでしょうか?
※エラー見た時は、'hoge'カラムに「'2147483647'」があって、それが重複されていると思っていたのですが…

■環境
・MySQL

A 回答 (1件)

> ・エラーの意味を教えてください


あなたが理解したとおり、'2147483647'というエントリーが重複した値を許さないカラムであるhogeに既にあって、それを更に登録しようとしているということだと思います。

> ・「'2147483647'」には何か特別な意味があるのでしょうか?

32bit 符号付き整数型の最大値ですよね。
hogeに入力される値の初期値や異常値としてINT_MAXを使っていたりしませんか?


その問題が出るテーブルで次を実行したら、なにか表示されませんか?
SELECT * FROM テーブル名 WHERE hoge='2147483647';

とりあえず、修正方法としてはINT_MAXが入った値がなぜRDBに登録されたかを調べ、それが入らないようにエラー表示をするようにコードを変えることでしょうね。

この回答への補足

・回答ありがとうございました
・追加で2点教えてください

1.MySQLでINT型の最大値を超えたデータを格納しようとするとどうなるのでしょうか?
2.「2147483647」より大きい数値を格納できる型には何があるでしょうか?

■補足
・hogeカラムには既に'2147483647'カラムが格納されているのですが、この時、最大値を越えた値を格納しようとすると、このエラーが出るような気がします
・もしかして、INT型最大値を超えた場合は、自動的に最大値が格納される決まりがあるのでしょうか?

補足日時:2013/12/24 15:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!