重複エラーの原因と意味

このQ&Aのポイント
  • 重複エラーが発生した際に表示されるエラーメッセージを検索しましたが、エラーの意味については詳細が分かりませんでした。
  • エラーメッセージに含まれる「'2147483647'」についても特別な意味はないようです。
  • 重複エラーの原因としては、指定されたキーが既にデータベースに存在するために発生することが考えられます。具体的には、'hoge'カラムに「'2147483647'」が既に存在している場合に、同じ値を挿入することができずにエラーが発生します。
回答を見る
  • ベストアンサー

Duplicate entry '21474836

'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+Uncaught+exception+'PDOException'+with+message+'SQLSTATE%5B23000%5D%3A+Integrity+constraint+violation%3A+1062+Duplicate+entry+'2147483647'&oq=Fatal+error%3A+Uncaught+exception+'PDOException'+with+message+'SQLSTATE%5B23000%5D%3A+Integrity+constraint+violation%3A+1062+Duplicate+entry+'2147483647' ■質問 ・エラーの意味を教えてください ・「'2147483647'」には何か特別な意味があるのでしょうか? ※エラー見た時は、'hoge'カラムに「'2147483647'」があって、それが重複されていると思っていたのですが… ■環境 ・MySQL

  • re97
  • お礼率80% (601/744)
  • MySQL
  • 回答数1
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

> ・エラーの意味を教えてください あなたが理解したとおり、'2147483647'というエントリーが重複した値を許さないカラムであるhogeに既にあって、それを更に登録しようとしているということだと思います。 > ・「'2147483647'」には何か特別な意味があるのでしょうか? 32bit 符号付き整数型の最大値ですよね。 hogeに入力される値の初期値や異常値としてINT_MAXを使っていたりしませんか? その問題が出るテーブルで次を実行したら、なにか表示されませんか? SELECT * FROM テーブル名 WHERE hoge='2147483647'; とりあえず、修正方法としてはINT_MAXが入った値がなぜRDBに登録されたかを調べ、それが入らないようにエラー表示をするようにコードを変えることでしょうね。

re97
質問者

補足

・回答ありがとうございました ・追加で2点教えてください 1.MySQLでINT型の最大値を超えたデータを格納しようとするとどうなるのでしょうか? 2.「2147483647」より大きい数値を格納できる型には何があるでしょうか? ■補足 ・hogeカラムには既に'2147483647'カラムが格納されているのですが、この時、最大値を越えた値を格納しようとすると、このエラーが出るような気がします ・もしかして、INT型最大値を超えた場合は、自動的に最大値が格納される決まりがあるのでしょうか?

関連するQ&A

  • MySQL エラー Duplicate entry のkey~について

    UPDATE構文を使うと、Duplicate entry~という値の重複のエラーが出ます。 ところでその後の、for key と言うのはどういう意味なんでしょうか?エラーが出たフィールドだと思っているんですが、数字が帰ってきて読み方がわかりません。

    • ベストアンサー
    • MySQL
  • ERROR1062:Duplicate entry.....というエラーが出てしまいました

    いつもお世話になります。 データベースからSELECTで抽出したデータを別のテーブルにINSERTするSQLを実行したのですが、 ERROR1062:Duplicate entry.....というエラーが出てしまいました。 お詳しい方がいらっしゃいましたら、アドバイスをいただけませんでしょうか?よろしくお願いいたします。 【実行したSQL】 INSERT INTO tblA (dataA1, dataA2, dataA3, dataA4) SELECT "9001","AA",dataB1,dataB2 FROM tblB WHERE dataB1 = 52 tblAの主キー:dataA1とdataA2 tblBの主キー:dataB1 dataA1とdataA2はtblAの主キーとなっているため、重複してしまうということのようです。tblBの主キーはdataB1であるため、抽出されてくるデータは常に1件なので問題ないと期待していましたが、甘くなかったようです。何か良い方法はないものでしょうか?よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • 至急助けてください!!ブログを作っています。

    至急助けてください!!ブログを作っています。 助けてください!!エラーメッセージが出て何のことだか?? データベース?ですか? 現在ブログを作っています。http://www.progoo.com/ 使用サーバー:サクラインターネット PHP Version 5.2.14 エラー内容 Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'loversT_member' already exists' in /home/dh-lovers/www/blog/blog/setup.php:0 Stack trace: #0 /home/dh-lovers/www/blog/blog/setup.php(0): PDO->exec() #1 {main} thrown in /home/dh-lovers/www/blog/blog/setup.php on line 0

  • uniqueキーをupdateで+1するとERROR 1062: Duplicate entry になる

    create table table1 ( a tinyint unsigned not null, b tinyint unsigned not null, unique index_table1 ( a, b ) ); insert into table1 values('1','1'); insert into table1 values('1','2'); update table1 set b = b+1 where a = '1'; とすると、 ERROR 1062: Duplicate entry '1-2' for key 1 とエラーになってしまいます。 どうやら unique の制約に引っかかっているみたいです。 結果としては 1,2 1,3 になればいいのですが、一個一個bが多い順番にSQLを発行するか、unique 制約を外すしかないんでしょうか? (面倒なので、一発でやりたいのです)

    • ベストアンサー
    • MySQL
  • xamppでpdoを用いてSQLiteを使う方法

    いつもお世話になります。 xamppの環境でphpからSQLite3のファイルを操作したいと思っています。 xamppのSQLiteはSQLite2が標準でSQLite3を扱うためにはpdoを使う必要がある旨のページを見て php_pdo.dll、php_pdo_sqlite.dllをphp\extフォルダへDLし、php.iniのextension=設定も行いました。 下記のようなスクリプトを書いたのですが、 Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in ・・・ というエラーメッセージが出てどうにも原因がわかりません。 どのようにしたらよいのか教えていただけないでしょうか。 <?php //---PDOでのアクセスStart $dsn = 'sqlite:mondo_quest3.db'; $pdo = new PDO($dsn); $sql="select * from ans order by id"; $entries = $pdo->query($sql); while ($entry = $entries->fetch()) { // 処理を書く } //---PDOでのアクセスEnd ?>

    • ベストアンサー
    • PHP
  • PHPでFetalなエラーが発生した場合

    PHPでFetalなエラーが発生した場合 に、ApacheのErrorDocument 500で指定したメッセージを表示させたいのですが、上手くいきません。 ■Apacheの設定 ErrorDocument 500 "The server made a boo boo." ■PHPの設定 error_reporting(6135); // 0にしてもダメでした ini_set('display_errors', '1'); // 0にしてもダメでした ■PHPのコード <?php throw new Excpetopn('err!'); ?> ブラウザからアクセスすると、httpレスポンスコードは500が返ってきています。 ini_set('display_errors', '1'); にすると、 Fatal error: Uncaught exception 'Exception' with message が表示されます。 逆に ini_set('display_errors', '0'); にすると、 何も表示されません。 どうしたら、ErrorDocument 500で設定した"The server made a boo boo."が表示されるようになりますでしょ うか。。 そもそも表示できないのでは?と思いはじめてますが。。 知っている方いましたら、ぜひともご教授下さい。 よろしくおねがいいたします。 Apache 2.2.3 PHP5.3.0

    • ベストアンサー
    • PHP
  • Auto CADのフェイタルエラー

    Auto CADを使用中「フェイタルエラー」が表示され突然続行不能で止まってしまいます。これはいったい何でしょう?ちなみにある所で同じ事をするとこうなります。 以下画面のエラーメッセージをそのまま書きます。 フェイタルエラー:Unhandled Access Violation Reading 0x0004 Exception at 6719a0d9h

  • ウイルスセキュリティゼロのエントリー方法

    ウイルスセキュリティゼロのライセンスパックのエントリーで、シリアル番号がダブっていたので、ソフトを削除し再インストール後に新しいシリアル番号で新しくエントリーしましたが、下記のメッセージが何度も出ます。 時間を見計らって10回以上トライしましたが、まだエントリーが出来ません。 本当にサーバーがこんなに混んでいるのでしょうか? それとも再エントリーから入らなければならないのでしょうか? Q. 【ウイルスセキュリティ】「通信中にエラーが発生しました。」と表示される A. 以下をご確認ください 「エントリー」(または「アップデート」)の際に、サーバーが混雑していた可能性があります。 しばらくしてから再度同様の操作を行なってください。

  • 関数について。FireFoxで動作しません

    JavaScriptの関数について質問があります。 var makeFunc = function(){ return function(){ alert(); } } var a = makeFunc(); alert(typeof a);//function a();//FireFoxではエラー IEでは、aを関数として実行できるのですが、FireFoxでは エラーが出てしまいます。ちなみにIE、FireFox共にtypeof では"function"と表示されました。 エラーの原因と改善策を教えてください。よろしくお願いします。 FireFoxのエラー: uncaught exception:[Exception "Not enough arguments [nsIDOMWindowInternal.alert]"

  • postgresのストアドファンクションでエラーの

    postgresのストアドファンクションでエラーの拾い方を教えてください。 insertして重複したらアップデートに切り替えるというサンプルをよく見かけます。 DECLARE BEGIN insert文 RETURN TRUE; EXCEPTION WHEN unique_violation THEN update文 END; それと同じノリで、何かしらのエラーがあった時に、 『RETURN FALSE;』するか、もしくはエラーコードをそのまま拾って返すというようなサンプルが欲しいです。 DECLARE BEGIN 何かしらのSQL RETURN TRUE; EXCEPTION WHEN すべてのエラー THEN RETURN FALSE; END; DECLARE BEGIN 何かしらのSQL RETURN TRUE; EXCEPTION WHEN すべてのエラー THEN RETURN エラーコード; END;