MySQL错误1264:列超出范围值

时间:2013-01-11 18:33:10

标签: mysql sql insert integer

正如我在MySQL中的SET cust_fax这样:

cust_fax integer(10) NOT NULL,

然后我插入这样的值:

INSERT INTO database values ('3172978990');

然后它说

  

`错误1264`超出列

的值

我想知道错误在哪里?我的套装?还是其他?

任何答案都将不胜感激!

4 个答案:

答案 0 :(得分:74)

值3172978990大于2147483647 - INT的最大值 - 因此出错。 MySQL整数类型及其范围为listed here

另请注意,(10)中的INT(10)未定义整数的“大小”。它指定列的display width。此信息仅供参考。

要修复错误,请将数据类型更改为VARCHAR。电话和传真号码应存储为字符串。请参阅this discussion

答案 1 :(得分:11)

您超过了 int 数据类型的长度。您可以使用 UNSIGNED 属性来支持该值。

SIGNED INT 可以支持 2147483647 UNSIGNED INT 允许加倍。在此之后,您仍然希望保存数据,而不是使用长度为10的 CHAR VARCHAR

答案 2 :(得分:1)

tl; dr

确保您的AUTO_INCREMENT不在范围内。在这种情况下,请使用以下命令为其设置一个新值:

ALTER TABLE table_name AUTO_INCREMENT=100 -- Change 100 to the desired number

说明

AUTO_INCREMENT可以包含一个大于数据类型所允许的最大值的数字。如果您填写了随后清空的表,但AUTO_INCREMENT保持不变,则可能会发生这种情况,但是可能还有不同的原因。在这种情况下,新条目的ID将超出范围。

解决方案

如果这是导致问题的原因,则可以通过将AUTO_INCREMENT设置为比最新行的ID大一个来解决此问题。因此,如果最新行的ID是100,则:

ALTER TABLE table_name AUTO_INCREMENT=101

如果您想查看AUTO_INCREMENT的当前值,use this command

SELECT `AUTO_INCREMENT`
FROM  INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName'
AND   TABLE_NAME   = 'TableName';

答案 3 :(得分:0)

使用:

ALTER TABLE `table` CHANGE `cust_fax` `cust_fax` VARCHAR(60) NULL DEFAULT NULL;