• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DBに半角数字10桁入力すると別数字になります)

DBに半角数字10桁入力すると別数字になります

このQ&Aのポイント
  • phpとphpmyadminを連携しており、入力した10桁の数字が異なる数字になってしまいます。
  • phpでは9つのフォームがあり、入力された値が2~10つ目のフィールドに格納されます。
  • phpmyadminの中身を確認すると、10桁の数字が常に「2147483647」となっています。どこが原因かわかりません。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

データの有効精度なんて基本中の基本でしょう。 どんな解説書を読んでも最初の方で書かれているはずです。 今回のケースであればdecimalで精度を確保するか、 intではなくbigintで有効範囲をおおめにとる。 極端な話文字列型でもってしまう・・・などの対応が考えられます。 create table num (d9 decimal(9,0),d10 decimal(10,0),d11 decimal(11,0),i int,b bigint,str varchar(30)); insert num values (1234564757,1234564757,1234564757,1234564757,1234564757,1234564757) ,(2222222222,2222222222,2222222222,2222222222,2222222222,2222222222) ,(4545454545,4545454545,4545454545,4545454545,4545454545,4545454545) ,(9876543210,9876543210,9876543210,9876543210,9876543210,9876543210) ,(12312312312,12312312312,12312312312,12312312312,12312312312,12312312312); select * from num;

fk710b
質問者

お礼

ご指摘誠にありがとうございます。 ご回答いただいた通りにしましたところ、正常に格納されました。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

ちなみに・・・ int(20)は、zerofill(ゼロで桁揃え)するときの埋める桁数です。 unsignedすればマイナスがない分2倍近く確保できますが 基本的にその桁数の精度になるわけではありません。 create table num2(val1 int(20),val2 int(20) unsigned zerofill ); insert num2 values(1,1) ,(1234564757,1234564757) ,(2222222222,2222222222) ,(99999999999,99999999999); select * from num2;

fk710b
質問者

お礼

追記まで添えていただき、ありがとうございます。 無事解決いたしました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

オーバーフローして符号付き 32ビット整数に収まっていないから, とか?

fk710b
質問者

お礼

ご回答ありがとうございます。 と、なると、どのようにすれば解決するのでしょうか...すみません、知識が中途半端なもので解決方法をお教えいただければ幸いです。

fk710b
質問者

補足

関係ないとは思ったのですが、テスト感覚で、int(20)にしてみても、同じ結果でした。

関連するQ&A