MySQL 错误 1264:列的值超出范围
Posted
技术标签:
【中文标题】MySQL 错误 1264:列的值超出范围【英文标题】:MySQL Error 1264: out of range value for column 【发布时间】:2012-12-26 09:48:47 【问题描述】:正如我在 mysql 中的表中 SET
cust_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
的 CHAR 或 VARCHAR【讨论】:
【参考方案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 - 列的值超出范围,即使它是自动递增的