INT列值超出10个字符

时间:2012-06-23 18:50:47

标签: mysql sql database drupal phpmyadmin

我正在创建一个列为INT(20)的表。每当我提交一个大于10个字符的值时,该值就会被加扰。任何10个或更少字符作为值存储正确,我不知道为什么。我将长度设置为20,但似乎忽略了这一点。

[字符长度+10]
例如:(1234567890123 --- 变为 ---> 2147483647)

[字符长度< = 10]
例如:(1234567890 --- 仍然 ---> 1234567890)

我想我可能需要以某种方式改变表的结构,但到目前为止还没有任何效果。我很欣赏任何有用的智慧词汇,以便在我的表格中正确存储大于10的数值。

感谢。

注意:我使用的是MySQL,PhpMyAdmin,Drupal

3 个答案:

答案 0 :(得分:5)

它正在溢出。

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

参见文档:

答案 1 :(得分:1)

INT(20)只表示可能会显示20个数字。如果数字较大,则用作截止值;如果指定ZEROFILL,则用作填充尺寸。

由于可存储的最大整数是2 32 -1(假设为UNSIGNED),并且您超过该值,因此您将获得“加扰”数字。

要解决此问题,请使用BIGINT,这样您就可以使用最高2 64 -1或FLOAT来获取大量数据的潜力一些精确度。

答案 2 :(得分:0)

实际上,您应该使用DECIMAL而不是INT或BIGINT。这是SQL中用于保存具有指定精度的数字的数据类型,这就是您所拥有的。