我有这个专栏
INT(10) ZEROFILL NOT NULL DEFAULT '0000000000',
但是当我插入类似的东西时9100000010
,我得到4294967295
它应该允许有 10 位数字,对吧?
如何正确地做到这一点?
MySQL 中 INT 字段中可能的最大值是2147483647
,您的值9100000010
大于该值。这就是为什么它溢出到4294967295
无符号整数的最大值。
INT 4 -2147483648 2147483647
BIGINT
如果您想存储更大的数字,请使用,其范围为:
BIGINT 8 -9223372036854775808 9223372036854775807
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
在 MySQL 中,INT(10) 并不意味着值限制为 10 个字符的值。这仅意味着 MySQL 在返回它们时会尝试用空格/零填充这些值。
任何有符号的 INT 包括 INT(10)、INT(5) 或任何其他 INT(n) 的数值范围为:-2,147,483,648 ... 2,147,483,647,最多为 10 位。
你达到了 int 的最大值。mysql中int的int最大值范围是4294967295(无符号)。所以你必须使用 BIGINT。你可以在这里获得更多信息: Mysql Numeric types
希望这可以帮助
亲切的问候
它应该允许有 10 位数字,对吧?
不,mySQL中INT和整数类型的大小是设置字段指定ZEROFILL时的显示宽度。
例如,如果您插入的值是 123456 那么当您查询它时,它将显示为 0000123456 ,它只是显示宽度,不影响该值。
所以取值范围由数据类型本身决定,而不是显示宽度。要存储更大的值,您应该将数据类型更改为合适的类型,例如BIGINT。
来自mySQL 参考:
INT : A normal-size integer. The signed range is -2147483648 to 2147483647. The unsigned range is 0 to 4294967295.
我相信你会得到 int 最大值。INT(10) 用于数字填充而不是限制字符数。
MySQL 将在返回它们时尝试用空格/零填充这些值。