- ベストアンサー
DBに半角数字10桁入力すると別数字になります
- phpとphpmyadminを連携しており、入力した10桁の数字が異なる数字になってしまいます。
- phpでは9つのフォームがあり、入力された値が2~10つ目のフィールドに格納されます。
- phpmyadminの中身を確認すると、10桁の数字が常に「2147483647」となっています。どこが原因かわかりません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
データの有効精度なんて基本中の基本でしょう。 どんな解説書を読んでも最初の方で書かれているはずです。 今回のケースであれば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;
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
ちなみに・・・ 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;
お礼
追記まで添えていただき、ありがとうございます。 無事解決いたしました。
- Tacosan
- ベストアンサー率23% (3656/15482)
オーバーフローして符号付き 32ビット整数に収まっていないから, とか?
お礼
ご回答ありがとうございます。 と、なると、どのようにすれば解決するのでしょうか...すみません、知識が中途半端なもので解決方法をお教えいただければ幸いです。
補足
関係ないとは思ったのですが、テスト感覚で、int(20)にしてみても、同じ結果でした。
お礼
ご指摘誠にありがとうございます。 ご回答いただいた通りにしましたところ、正常に格納されました。