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

Posted

技术标签:

【中文标题】MySQL 错误 1264:列的值超出范围【英文标题】:MySQL Error 1264: out of range value for column 【发布时间】:2012-12-26 09:48:47 【问题描述】:

正如我在 mysql 中的表中 SETcust_fax 一样:

cust_fax integer(10) NOT NULL,

然后我插入这样的值:

INSERT INTO database values ('3172978990');

然后它说

`error 1264` 列值不足

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

任何答案将不胜感激!

【问题讨论】:

你可以查看这个问题***.com/questions/6621530/1264-out-of-range-value-fix来解决你的问题。 最好将数字和数字以及字符串指定为字符串。 '3172978990' 是一个字符串,3172978990 是一个数字。顺便提一句。 int(10) 中的 10 确实 not 定义任何数据类型约束。它只是一个客户端显示提示 How do I fix the 'Out of range value adjusted for column' error?的可能重复 【参考方案1】:

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

还要注意INT(10) 中的(10) 没有定义整数的“大小”。它指定列的display width。此信息仅供参考。

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

【讨论】:

对我来说,这个错误是由AUTO_INCREMENT 引起的,它在行数很少的表中变成了一个巨大的数字。所以我需要ALTER TABLE table_name AUTO_INCREMENT=103;(如果目前有 102 行)。 @totymedli 这对于遇到相同症状但问题不同的人来说可能是一个有用的答案。 我将int 用于电话号码,因为我通过删除所有非数字来清理用户输入。 @Reed,我不建议将int 用于电话号码。如果有人将国际格式输入为 0044.... 您将丢失 00。在将代码发送到查询之前对其进行清理。 @Tipul07 你完全正确。 VARCHAR 就是这样。我在美国开发我制作的大多数东西都是我家乡本地的,但我仍然应该从第一天开始就考虑到可访问性。【参考方案2】:

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

ALTER TABLE T_PERSON MODIFY mobile_no BIGINT;

【讨论】:

如果应用程序正在存储电话号码,那么使用字符串当然是首选。但是,感谢您的 ALTER 声明。它解决了我的问题(我使用 INTEGER 存储文件大小的纯整数溢出)。 这对我有用 ALTER TABLE tbl_name MODIFY tbl_column BIGINT(50) UNSIGNED NOT NULL 点赞!其他转换为字符串的建议是无稽之谈。整数是整数是有原因的。 "@Reed 我不建议将 int 用于电话号码。如果有人将国际格式输入为 0044...。您将丢失 00。" - 此页面上的另一条评论。我要去VARCHAR【参考方案3】:

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

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

CHARVARCHAR

【讨论】:

【参考方案4】:

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 的当前值,use this command:

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

【讨论】:

无法理解原因,但这个对我有用【参考方案5】:

合作:

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

【讨论】:

以上是关于MySQL 错误 1264:列的值超出范围的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 错误代码:1264。第 1 行的列 'columnname' 的值超出范围

PDO PHP - PDOException - 数值超出范围:1264 第 1 行的列“customer_id”的值超出范围

MySQL 错误 #167 - 列的值超出范围,即使它是自动递增的

列 Oracle 到 MySQL 的值超出范围

为啥 sklearn MinMaxScaler() 返回超出范围的值而不是错误?

mysql数据超出范围的处理