当我试图向表中添加几个特定数据时,出现了一个奇怪的错误。下面是我的MySQL命令。
CREATE TABLE IF NOT EXISTS `phonenumbers` (
`id` int(11) NOT NULL,
`number` int(11) NOT NULL,
`added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=latin1;
INSERT INTO `phonenumberverifier`.`phonenumbers` (`id`, `number`, `added`) VALUES (NULL, '3522316712', CURRENT_TIMESTAMP)"id“是主键,添加的字段是当前时间戳。
以下是我得到的错误。
#1062 - Duplicate entry '2147483647' for key 'number'请注意,数字值2147483647作为记录存在。但这与这个新条目无关。此表与其他表没有任何依赖关系。
请让我知道是什么导致了这个问题,以及需要做些什么来解决这个问题。提前谢谢。
发布于 2014-11-22 17:37:25
您的错误特别奇怪,因为您的代码片段没有指定number是唯一的(而且没有在其上显示唯一的索引)。我将假设这是一个疏忽,因为错误信息在这一点上非常清楚。
正在发生的事情是,您正在分配一个比允许进入字段更大的值。正如文档中所解释的那样
当MySQL将值存储在列数据类型允许范围之外的数值列中时,结果取决于当时有效的SQL模式:
当将超出范围的值分配给整数列时,MySQL存储表示列数据类型范围的相应端点的值。如果将256存储到TINYINT或TINYINT无符号列中,则MySQL分别存储127或255。
因此,您的号码被分配到最大的可能值。如果您做了不止一次,并且有一个唯一的约束/索引,那么您将得到所看到的错误。
如果没有唯一的约束/索引,那么每次插入的值太大时,都会将值2147483647放在列中。
发布于 2014-11-22 17:25:02
数字被定义为整数值,2147483647是有符号整数可以取的最大值(最小值-2147483648)。我猜在您的create语句中缺少这个数字被定义为唯一键。您应该看看实际的表定义。你在这里提供的那个不可能是合理的。插入后的数字仅为2147483647,没有错误消息。
发布于 2014-11-22 17:32:56
是的,未签名的INT可能只在-2147483648到-2147483647之间(根据此链接)。所以,不可能是3522316712。
https://stackoverflow.com/questions/27080244
复制相似问题