2

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

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

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

我想我可能需要以某种方式改变表格的结构,但到目前为止没有任何效果。我将不胜感激任何有用的智慧之言,以使我的数值大于 10 正确存储在我的表中。

谢谢。

注意:我正在使用 MySQL、PhpMyAdmin、Drupal

4

3 回答 3

5

溢出来了

an 的最大值INT是 2147483647。您应该使用 aBIGINT而不是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指定时作为焊盘尺寸。

由于可以存储的最大整数是 2 32 -1(假设UNSIGNED),并且您超出了该值,因此您会得到“打乱”的数字。

要解决这个问题,请使用BIGINT,它可以让您达到 2 64 -1,或者FLOAT以某些精度为代价获得巨大数字的潜力。

于 2012-06-23T18:54:29.283 回答
0

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

于 2012-06-23T19:21:55.993 回答