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

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

cust_fax integer(10) NOT NULL,

然后我插入这样的值:

INSERT INTO database values ('3172978990');

但是然后说

错误1264超出列的值

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

任何答案将不胜感激!

Cin asked 2019-11-08T05:13:51Z
4个解决方案
83 votes

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

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

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

Salman A answered 2019-11-08T05:14:21Z
19 votes

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

ALTER TABLE T_PERSON MODIFY mobile_no BIGINT;
Rohit Kolhekar answered 2019-11-08T05:14:46Z
12 votes

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

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

Saharsh Shah answered 2019-11-08T05:15:19Z
3 votes

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';
totymedli answered 2019-11-08T05:16:13Z
translate from https://stackoverflow.com:/questions/14284494/mysql-error-1264-out-of-range-value-for-column