我正在创建一个列为INT(20)的表。每当我提交一个大于10个字符的值时,该值就会被加扰。任何10个或更少字符作为值存储正确,我不知道为什么。我将长度设置为20,但似乎忽略了这一点。
[字符长度+10]
例如:(1234567890123 --- 变为 ---> 2147483647)
[字符长度< = 10]
例如:(1234567890 --- 仍然 ---> 1234567890)
我想我可能需要以某种方式改变表的结构,但到目前为止还没有任何效果。我很欣赏任何有用的智慧词汇,以便在我的表格中正确存储大于10的数值。
感谢。
注意:我使用的是MySQL,PhpMyAdmin,Drupal
答案 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中用于保存具有指定精度的数字的数据类型,这就是您所拥有的。