首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL重复条目错误,即使它不是重复条目

MySQL重复条目错误,即使它不是重复条目
EN

Stack Overflow用户
提问于 2014-11-22 17:22:15
回答 3查看 913关注 0票数 1

当我试图向表中添加几个特定数据时,出现了一个奇怪的错误。下面是我的MySQL命令。

代码语言:javascript
复制
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“是主键,添加的字段是当前时间戳。

以下是我得到的错误。

代码语言:javascript
复制
#1062 - Duplicate entry '2147483647' for key 'number'

请注意,数字值2147483647作为记录存在。但这与这个新条目无关。此表与其他表没有任何依赖关系。

请让我知道是什么导致了这个问题,以及需要做些什么来解决这个问题。提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-22 17:37:25

您的错误特别奇怪,因为您的代码片段没有指定number是唯一的(而且没有在其上显示唯一的索引)。我将假设这是一个疏忽,因为错误信息在这一点上非常清楚。

正在发生的事情是,您正在分配一个比允许进入字段更大的值。正如文档中所解释的那样

当MySQL将值存储在列数据类型允许范围之外的数值列中时,结果取决于当时有效的SQL模式:

  • 如果启用了严格的SQL模式,MySQL会根据SQL标准拒绝超出范围的值,而插入失败。
  • 如果没有启用限制模式,则MySQL将该值剪辑到范围的适当端点,然后存储结果值。

当将超出范围的值分配给整数列时,MySQL存储表示列数据类型范围的相应端点的值。如果将256存储到TINYINT或TINYINT无符号列中,则MySQL分别存储127或255。

因此,您的号码被分配到最大的可能值。如果您做了不止一次,并且有一个唯一的约束/索引,那么您将得到所看到的错误。

如果没有唯一的约束/索引,那么每次插入的值太大时,都会将值2147483647放在列中。

票数 4
EN

Stack Overflow用户

发布于 2014-11-22 17:25:02

数字被定义为整数值,2147483647是有符号整数可以取的最大值(最小值-2147483648)。我猜在您的create语句中缺少这个数字被定义为唯一键。您应该看看实际的表定义。你在这里提供的那个不可能是合理的。插入后的数字仅为2147483647,没有错误消息。

票数 1
EN

Stack Overflow用户

发布于 2014-11-22 17:32:56

是的,未签名的INT可能只在-2147483648到-2147483647之间(根据此链接)。所以,不可能是3522316712。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27080244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档