2011-07-12 13 views
2

私はmysql dbを使ってIDを保存しています。それは正常に動作していた。大きな数値をmysql DBに格納する際の問題

今は10000000754987のようなIDです.1.0000000754987E + 14として保存されています。どのように私はそれを修正することができます。

フィールドは、varchar 255文字の制限に設定されています。

何か助けていただきありがとうございます。

ありがとうございました。

+0

挿入コードを投稿してください、あなたは必ずそのvarchar型のフィールドがありますか?上記の内容は[科学的表記](http://en.wikipedia.org/wiki/Scientific_notation)ですが、修正する必要はありません;それは正しいです;) – Jacob

+0

PHPをデバッグして、あなたが本当に通過していることを確認しましたか? '1.0000000754987E + 14'の代わりに '10000000754987'をSQLクエリに追加しますか? – jlb

+7

なぜこれらの数値を格納するのにvarcharを使用していますか? bigintを使わないのはなぜですか?範囲は-9223372036854775808〜9223372036854775807です。符号なしの範囲は0〜18446744073709551615です。豊富でなければなりません。それは数字の書式設定の問題です。 –

答えて

1

あなたは明らかにそのIDを生成するためにPHPを使用しています。

正確に何が起こっているかは言及していないので、私はあなたのデータベース設計の特定の理由しか想定できません。

まず、bigintではなくvarcharではない番号を保存することができます。それはあなたが節約している整数なので、なぜvarcharを使うのか分からず、本質的に必要以上のスペースを無駄にしてしまいます。 bigintは、8バイトを使用して番号を格納します。つまり、varcharフィールドに格納される8桁を超えるすべての数値は、2^64までの数値を格納できるbigintフィールドよりも多くの領域を使用します。

第2に、計算操作の結果をdbに送信する前に、数値書式を使用しないでください。あなたが掲示した整数をコピー/貼り付け(10000000754987)、phpはそれを自動的に科学的表記に変換しないので、その数字の世代のバックグラウンドで何か他のことが起こっていると思われます。適切なフィールド型の数値(bigint)。エラーが常に人のものではないため、あなたがあなたのアプリについての追加情報を投稿した場合や、それが何をするのかについても役立ちます。

+1

私はそれが問題の誤植だと思う、実際には数字が1桁長い。 'E + 14'のためにこれを見ることができます。最初の数字が正しければ、科学的表現は 'E + 13'になります。この2つの数字は同じではありません。 – Karolis

0

あなたの問題は、数値IDがPHP/MySQLが処理するには大きすぎるということです。

データタイプをVARCHAR(36)に変更し、CakePHPは数値IDの代わりにUUIDsを使用し始めます。このテーブルの外部キーでもこれを行う必要があります。これにより、この問題が今後発生しないようにします。

それはvarchar型だとさらに、それはあまりにもあなたの現在のIDで動作するはずです。..

関連する問題