98

当我SET像这样在 MySQL 中的表中进行 cust_fax 时:

cust_fax integer(10) NOT NULL,

然后我插入这样的值:

INSERT INTO database values ('3172978990');

但后来它说

列的“错误 1264”值不足

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

任何答案将不胜感激!

4

5 回答 5

179

值 3172978990 大于 2147483647(最大值),INT因此出现错误。MySQL 整数类型及其范围在此处列出

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

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

于 2013-01-11T18:37:10.487 回答
36

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

ALTER TABLE T_PERSON MODIFY mobile_no BIGINT;
于 2015-11-23T15:11:20.203 回答
13

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

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

于 2013-01-11T18:39:39.687 回答
8

tl;博士

确保您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';
于 2019-03-17T00:37:37.860 回答
3

与:

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

于 2020-03-05T02:54:06.973 回答