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' 的值超出范围

列 Oracle 到 MySQL 的值超出范围

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

mysql数据超出范围的处理

扩展类似 excel 列的值的范围