MySQL错误1264:列的值超出范围


77

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

cust_fax integer(10) NOT NULL,

然后我插入这样的值:

INSERT INTO database values ('3172978990');

但是然后说

“错误1264”列的值不足

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

任何答案将不胜感激!


1
您可以检查此问题stackoverflow.com/questions/6621530/1264-out-of-range-value-fix以解决您的问题。
卢卡斯·莫斯

将数字,数字和字符串指定为字符串是一个好习惯。'3172978990'是一个字符串,3172978990是一个数字。顺便说一句。将10int(10)没有定义任何数据类型约束。它只是一个客户端显示提示
a_horse_with_no_name 2013年

Answers:


142

值3172978990大于2147483647 –的最大值INT–因此出错。MySQL整数类型及其范围在此处列出

另请注意,(10)inINT(10)并未定义整数的“大小”。它指定列的显示宽度。此信息仅供参考。

要解决该错误,请将您的数据类型更改为VARCHAR。电话和传真号码应存储为字符串。请参阅此讨论


对我而言,该错误是由于AUTO_INCREMENT为什么在具有较少行数的表中变得很大而导致的。所以我需要ALTER TABLE table_name AUTO_INCREMENT=103;(如果目前有102行)。
totymedli

1
@totymedli对于有相同症状但有不同问题的人,这可能是一个有用的答案。
Salman A

我使用int电话号码,因为我通过删除所有非数字来清理用户输入。
里德

1
@Reed,我不建议使用int电话号码。如果有人输入国际格式为0044 ....,您将丢失00。将代码中的电话号码清理掉,然后再发送给查询。
Tipul07年

@ Tipul07你完全正确。VARCHAR是的。我在美国从事开发工作,我做的大部分工作都在我的家乡本地,但从第一天起,我仍然应该牢记可访问性进行编码。
里德

28

您也可以将数据类型更改为bigInt,这将解决您的问题,除非需要,否则将整数保留为字符串不是一个好习惯。:)

ALTER TABLE T_PERSON MODIFY mobile_no BIGINT;

如果应用程序正在存储电话号码,那么使用字符串无疑是首选。但是,感谢您的ALTER声明。它解决了我的问题(使用INTEGER存储文件大小的纯整数溢出)。
Curt

这对我有用ALTER TABLE tbl_name修改tbl_column BIGINT(50)UNSIGNED NOT NULL
Adam Winnipass

已投票!其他建议转换为字符串是胡说八道。出于某种原因,整数是整数。
呼呼

“ @Reed我不建议将int用作电话号码。如果有人输入国际格式为0044 ...,您将失去00。” -在此页面上的另一条评论。我要去VARCHAR
Reed

13

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

SIGNED INT可以支持到2147483647,而UNSIGNED INT则可以支持两倍于此。之后,您仍然要保存数据,而不是使用长度为10的CHARVARCHAR


5

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的当前值,请使用以下命令

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.