当我的列是INT(10)时,为什么我不能插入10位数字

时间:2013-01-18 06:40:30

标签: mysql sql

我有这个专栏 INT(10) ZEROFILL NOT NULL DEFAULT '0000000000',

但是,当我插入9100000010之类的内容时,我会得到4294967295

它应该允许10位数,对吗?

如何做到这一点?

6 个答案:

答案 0 :(得分:5)

MySQL中INT字段中可能的最大值为2147483647,您的值9100000010大于此值。这就是溢出到4294967295的原因,即无符号整数的Max。

11.1.4.1. Integer Types (Exact Value)

INT    4    -2147483648 2147483647

如果要存储较大的数字,请使用BIGINT,其范围为:

BIGINT  8   -9223372036854775808    9223372036854775807

答案 1 :(得分:3)

Int具有最大值范围:

INT 4   -2147483648 2147483647
        0   4294967295 (unsigned )

因此,由于溢出,您获得了最大值。 使用bigint代替,它有8个字节 你会没事的。

http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html#integer-types

BIGINT  8   -9223372036854775808    9223372036854775807
          0                 18446744073709551615

答案 2 :(得分:2)

在MySQL中,INT(10)并不意味着值限制为10个字符的值。这只意味着MySQL会在返回时尝试用空格/零填充这些值。

任何带符号的INT的数值范围包括INT(10),INT(5)或任何其他INT(n):  -2,147,483,648 ... 2,147,483,647,最多10位数。

答案 3 :(得分:0)

我相信你得到int max值。 INT(10)表示数字填充,而不是限制字符数。

MySQL会在返回时尝试用空格/零填充这些值。

答案 4 :(得分:0)

你达到int的最大值。 mysql中int的int最大值范围是4294967295(unsigned)。 所以你必须使用BIGINT。您可以在此处获得有关此内容的更多信息: Mysql Numeric types

希望这有帮助

亲切的问候

答案 5 :(得分:0)

  

它应该允许10位数,对吗?

,mySQL的大小和mySQL中的整数类型是当字段指定了ZEROFILL时设置显示宽度。

例如,如果您插入的值是123456,那么当您查询它时,它将显示为0000123456,它只是显示宽度,不会影响该值。

所以值范围由数据类型本身决定,而不是显示宽度。要存储更大的值,您应该将数据类型更改为合适的值,例如BIGINT

来自mySQL reference

INT : A normal-size integer. The signed range is -2147483648 to 2147483647. The unsigned range is 0 to 4294967295.