MySQL错误1264:列超出范围值

Cin*_*Cin 59 mysql sql integer insert

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

cust_fax integer(10) NOT NULL,
Run Code Online (Sandbox Code Playgroud)

然后我插入这样的值:

INSERT INTO database values ('3172978990');
Run Code Online (Sandbox Code Playgroud)

但后来它说

'错误1264`超出列的值

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

任何答案将不胜感激!

Sal*_*n A 87

整数 3172978990大于2147483647更大,因此错误**.

要修复错误,请将数据类型更改为INT.电话,传真等应存储为字符串.见这个讨论.

**这是一个图表,告诉您哪个整数类型可以存储什么值.


Roh*_*kar 19

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

ALTER TABLE T_PERSON MODIFY mobile_no BIGINT;
Run Code Online (Sandbox Code Playgroud)


Sah*_*hah 12

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

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


tot*_*dli 8

tl;博士

确保您AUTO_INCREMENT没有超出范围。在这种情况下,为它设置一个新值:

ALTER TABLE table_name AUTO_INCREMENT=100 -- Change 100 to the desired number
Run Code Online (Sandbox Code Playgroud)

解释

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

解决方案

如果这是您的问题的原因,您可以通过设置AUTO_INCREMENT为比最新行的 id 大 1来修复它。因此,如果您的最新行的 id 为 100,则:

ALTER TABLE table_name AUTO_INCREMENT=101
Run Code Online (Sandbox Code Playgroud)

如果您想检查AUTO_INCREMENT的当前值,请使用以下命令

SELECT `AUTO_INCREMENT`
FROM  INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName'
AND   TABLE_NAME   = 'TableName';
Run Code Online (Sandbox Code Playgroud)