【问题标题】:Issues faced with int(11) datatype in MYSQLMYSQL 中 int(11) 数据类型面临的问题
【发布时间】:2011-10-26 06:53:48
【问题描述】:

我在 MYSQL 中有一个主键 ID 为 int(11)(自动递增)的表。现在我有一个程序可以读取一些文本文件并在 id 列中输入值。 所以我的表应该包含:

id
897413
791783


但是发生的情况是,我在表中找不到大数字。这是因为 int(11) 可以保持的最大值吗?将 int(11) 增加到 int(20) 仍然面临同样的问题。我已经实现了很多代码,无法将数据类型更改为 big int。

编辑: 我尝试插入一条 id 为 523826 的记录,它在 DB 中保存为 450258。为什么会这样?

【问题讨论】:

  • int 和 bigint 的处理方式与 SQL 方式相同。如果您使用的是强类型语言,则必须更改变量的数据类型,但在 PHP 中,您应该能够更改数据类型而不会对代码产生任何不利影响。
  • int(11) 可以容纳的最大值是多少?
  • “大数字”是什么意思?大于 2147483647(签名 int 的最大值)?
  • @all:请看我的最新编辑

标签: mysql integer int


【解决方案1】:

mysql manual 对 int 数据类型的定义:

一个正常大小的整数。有符号范围是 -2147483648 到 2147483647。无符号范围是 0 到 4294967295。

int 类型始终为 4 字节(32 位)。 int(11) 中的 11 只是“显示宽度”,仅对 UNSIGNED ZEROFILL 列重要。更多详情请关注this blog post。

【讨论】:

  • 我尝试插入一条 id=523826 的记录,它被插入为 450258。怎么会?我也将大小增加到 int(20)
  • 您能发布INSERT 查询吗?
  • 您不能只将 INT 的大小增加到 20。整数列括号中的数字实际上仅用于填充零的值,因为它会填充那么多字符。否则,它绝对无法控制可以插入的值。对于无符号,INT 将永远无法存储 +/-2147483648 或 4294967295 之外的值。
【解决方案2】:

MySQL 中的 INT 是 32 位的。 INT(11) 可能意味着您有一个签名的 INT,这对于 ID 来说是无用的。将其更改为无符号 INT 将自动使可用 ID 的数量增加一倍(因为没有人使用负 ID)。即使 11“看起来”更大,这是因为它考虑了数字的“长度”,如果它是 11 个字符长的最大负数 (-2147483648)。

BIGINT 可让您达到 64 位,有符号或无符号。同样,未签名将允许您使用两倍的 ID (>0)。

如上所述,如果您的 PHP 不支持 64 位整数,那么您将无法轻松使用它们。

希望对您有所帮助。

【讨论】:

  • 我正在使用 java 和 java Integer 可以容纳 523826 。当我将它插入 db 时出现问题
  • 请提供您使用的SQL以及表结构。
猜你喜欢
  • 2011-07-12
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多