MySQL 数据类型超出范围

Posted

技术标签:

【中文标题】MySQL 数据类型超出范围【英文标题】:MySQL Datatype out of range 【发布时间】:2015-05-18 00:36:58 【问题描述】:

我有下表:

CREATE TABLE entries (id INT(10000) UNSIGNED AUTO_INCREMENT PRIMARY KEY, firstName VARCHAR(60), surname VARCHAR(60), course VARCHAR(250), subject VARCHAR(500), level VARCHAR(10), dateTime DATETIME);

但我收到以下错误:

  ERROR 1439 (42000): Display width out of range for column 'id' (max = 255)

最大值为 255 的任何原因?我以为最大值是 4294967295?

有什么想法吗?

【问题讨论】:

What is the size of column of int(11) in mysql in bytes?的可能重复 如果你真的回答会更有用 阅读副本。但是由于您需要盘子上的所有内容,因此 10000 不是最大大小,而是将使用多少位来显示 int。无论您在括号内放什么,整数总是有相同的限制。 您真的要定义一个可以显示 10,000 位数字的 INT 列吗? @Tom 括号中的数字是您需要显示的位数。如果你想显示数字 100000,你只需要 int(6)。但是,为什么要为显示精度而烦恼呢?只需使用 int。 【参考方案1】:

您正在创建一个显示宽度为 10000 位的整数。 MySQL 显然只允许 255 位数字。 您不能以这种方式将整数的最大值限制为任意数字。只需使用 SMALLINT。这接近你想要的。

顺便说一句。我喜欢将我的 ID 列设置为SERIAL。它是BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE 的别名。它比你显然需要的要宽得多。但它为您提供了某种 ID 列标准。此列中存储的最大值为18446744073709551615

【讨论】:

【参考方案2】:

它是一个可选值,它决定了INT(10000) 显示的位数,最大范围为255。它与int 类型的范围无关。如果您真的想显示很多数字,只需使用INTINT(255) ZEROFILL...

例如,如果您有一个int(10) zerofill,您会看到

0000000001 for 1
0000001001 for 1001 
and so on...

【讨论】:

【参考方案3】:

看起来 10000 位数字太多了。 尝试更明智的方法,例如 |id INT NOT NULL AUTO_INCREMENT PRIMARY KEY" 祝你好运:)

【讨论】:

以上是关于MySQL 数据类型超出范围的主要内容,如果未能解决你的问题,请参考以下文章

mysql数据超出范围的处理

MySQL数据类型

MySQL 数据类型

MySQL 数据类型

mysql中的数据类型

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围的问题