【发布时间】:2011-10-15 09:04:46
【问题描述】:
我有一个 mysql 数据库,我将它用作临时存储验证码值。它有一个自动递增的 id 键,带有 int(11) 字段。如果这个值大于 11 位会发生什么?
【问题讨论】:
我有一个 mysql 数据库,我将它用作临时存储验证码值。它有一个自动递增的 id 键,带有 int(11) 字段。如果这个值大于 11 位会发生什么?
【问题讨论】:
典型的 INT 使用 4 个字节,因此可以存储数字:
签名:-2147483648 to 2147483647
未签名:0 to 4294967295
BIGINT 使用 8 个字节,因此可以存储数字:
签名:-9223372036854775808 to 9223372036854775808
未签名:0 to 18446744073709551615
【讨论】:
这个数字 (11) 与列范围完全无关 - [SIGNED] INTEGER 定义了一个范围 (-2147483648 - 2147483647)。
括号内的数字仅在与ZEROFILL 结合使用时使用。然后它定义了显示数字的“长度”,即。值 275552 将作为 string 00000275552 返回。
【讨论】:
正如其他人所说,您不会得到 11 位数字。当您达到最大值时,所有超过它的值都将被视为最大值。在 auto_increment 字段的情况下,它将导致所有未来的插入失败,直到您将列类型更改为 BIGINT:
ERROR 1062 (23000): Duplicate entry '4294967295' for key 1
【讨论】:
int(11) 只接受前 11 位数字。其余的将被丢弃。
您可以修改您的表格并将您的 id 数据类型从 int 更改为 bigint。
希望这会有所帮助。
【讨论】:
当您达到最大值时,所有超过它的值都将被视为最大值。在 auto_increment 字段的情况下,它将导致所有未来的插入失败,直到您将列类型更改为 BIGINT:
【讨论】: