0

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

但是当我插入类似的东西时9100000010,我得到4294967295

它应该允许有 10 位数字,对吧?

如何正确地做到这一点?

4

6 回答 6

5

MySQL 中 INT 字段中可能的最大值是2147483647,您的值9100000010大于该值。这就是为什么它溢出到4294967295无符号整数的最大值。

11.1.4.1。整数类型(精确值)

INT    4    -2147483648 2147483647

BIGINT如果您想存储更大的数字,请使用,其范围为:

BIGINT  8   -9223372036854775808    9223372036854775807
于 2013-01-18T06:43:30.917 回答
4

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
于 2013-01-18T06:44:05.733 回答
2

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

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

于 2013-01-18T06:44:21.110 回答
0

你达到了 int 的最大值。mysql中int的int最大值范围是4294967295(无符号)。所以你必须使用 BIGINT。你可以在这里获得更多信息: Mysql Numeric types

希望这可以帮助

亲切的问候

于 2013-01-18T06:49:05.470 回答
0

它应该允许有 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.

于 2013-01-18T07:00:07.897 回答
0

我相信你会得到 int 最大值。INT(10) 用于数字填充而不是限制字符数。

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

于 2013-01-18T06:43:39.013 回答