MySQL 错误 #167 - 列的值超出范围,即使它是自动递增的
Posted
技术标签:
【中文标题】MySQL 错误 #167 - 列的值超出范围,即使它是自动递增的【英文标题】:MySQL error #167 - Out of range value for column even when it is autoincremented 【发布时间】:2017-10-30 22:58:05 【问题描述】:我有一个字段(称为 ID),定义为:
smallint(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=32768
我有一个查询如下(简化):
INSERT INTO delivery (`ConsigneeName`, `ConsigneePhone`) VALUES ('John Doe', '9999999999')
也试过了
INSERT INTO delivery (`ID`, `ConsigneeName`, `ConsigneePhone`) VALUES (NULL, 'John Doe', '9999999999')
但是,我不断收到错误消息:
#167 - Out of range value for column 'ID' at row 1
那么可能是什么问题?我束手无策 - 尝试在字段名称和值上使用 ' 和 ` 只是为了看看这是否是问题所在,但我得到了相同的结果。我什至尝试了 phpmyadmin 界面来插入值(并将 ID 留空),但我得到了同样的错误。
提前感谢您的帮助。
【问题讨论】:
【参考方案1】:您的自动增量超出了 smallint 日期类型的范围。所以你不能添加任何条目。 将此列的数据类型更改为 int。
请参阅the mysql documentation 了解数据类型范围
SMALLINT -32768 32767
【讨论】:
为什么自增开始超出范围?我根本没有给它任何价值。所以它应该创建一个有效的值。 @Chiwda 那是起始值,自动增量尝试向它添加一个 我的表已经插入满了,有人通过 DELETE 查询删除了数据。如果要重置自动增量值,请使用 TRUNCATE TABLE 查询或 ALTER TABLE 表名 AUTO_INCREMENT = 1 @Chiwda 所以有人输入了最大条目数,这就是为什么 Auto_increment 计数器在末尾span> @Chiwda BTW:如果您删除一条记录,AUTO_INCREMENT 计数器将不会返回以上是关于MySQL 错误 #167 - 列的值超出范围,即使它是自动递增的的主要内容,如果未能解决你的问题,请参考以下文章
为啥我收到错误 1264:第 1 行的“ping”列的值超出范围?
MySQL 错误代码:1264。第 1 行的列 'columnname' 的值超出范围