2

INT(20)の列を持つテーブルを作成しています。10文字を超える値を送信すると、値がスクランブルされます。値として10文字以下のものは適切に格納されますが、その理由はわかりません。長さを20に設定しましたが、これを無視しているようです。

[文字長+10]
例:(1234567890123------>2147483647になります)

[文字の長さ<=10]
例:(1234567890---残り--->1234567890)

どういうわけかテーブルの構造を変える必要があるのではないかと思っていますが、今のところ何もうまくいきません。10を超える数値をテーブルに適切に保存するために役立つ知恵の言葉をいただければ幸いです。

ありがとう。

注:MySQL、PhpMyAdmin、Drupalを使用しています

4

3 に答える 3

5

あふれています。

anの最大値INTは2147483647です。のBIGINT代わりにを使用する必要がありINTます。

                 size    min                         max
INT              4       -2147483648                 2147483647
UNSIGNED INT     4       0                           4294967295
BIGINT           8       -9223372036854775808        9223372036854775807
UNSIGNED BIGINT  8       0                           18446744073709551615

ドキュメントを参照してください:

于 2012-06-23T18:52:07.847 に答える
1

INT(20)20個の数字が表示される可能性があることを意味します。これは、数値が大きい場合はカットオフとして機能し、指定されている場合ZEROFILLはパッドサイズとして機能します。

格納できる最大の整数は232-1(と仮定UNSIGNED)であり、その値を超えているため、「スクランブルされた」数値が得られます。

この問題を解決するにはBIGINT、を使用します。これにより、2 64 -1まで上げることができます。またはFLOAT、ある程度の精度を犠牲にして、膨大な数の可能性を得ることができます。

于 2012-06-23T18:54:29.283 に答える
0

実際には、INTやBIGINTではなくDECIMALを使用する必要があります。これは、指定された精度で数値を保持するように設計されたSQLのデータ型であり、これはあなたが持っているように見えます。

于 2012-06-23T19:21:55.993 に答える