【问题标题】:ERROR 1062 (23000): Duplicate entry '2147483647' for key 'PRIMARY'错误 1062 (23000):键 'PRIMARY' 的重复条目 '2147483647'
【发布时间】:2013-12-07 13:52:14
【问题描述】:

首先,我已经看到很多其他类似的帖子,但是答案不适用于我的特定案例。 以防万一我只有几个月的 SQL 学习时间,我对此知之甚少。

有一张桌子:

CREATE TABLE passenger_details
   (
    bank_card INT(20) NOT NULL AUTO_INCREMENT,
    email VARCHAR(20), 
    mobile INT(15) NOT NULL,
    p_id INT NOT NULL,    
    PRIMARY KEY (bank_card),
    FOREIGN KEY (p_id) REFERENCES passenger(p_id) 
    );

INSERT INTO passenger_details 
VALUES (0123012301230123,'blah_@hotmail.com',0872863492,1234);

select*from passenger_details;
+------------+--------------------+-----------+------+
| bank_card  | email              | mobile    | p_id |
+------------+--------------------+-----------+------+
| 2147483647 | blah_@hotmail.com  | 872863492 | 1234 |
+------------+--------------------+-----------+------+
1 row in set (0.00 sec)  

我们可以看到,之前的值,只是在表格中出错了。应该是 16 个数字,而不仅仅是 10,实际上是不同的数字。
当我尝试插入新值时:

INSERT INTO passenger_details 
VALUES (1234258431681842,'blah@icloud.com',0895764829,123548);
ERROR 1062 (23000): Duplicate entry '2147483647' for key 'PRIMARY'

如果 bank_card 是 AUTO_INCREMENT 为什么会有错误? 要不要把PK换个地方?

非常感谢任何帮助

【问题讨论】:

  • '2147483647' 是已签名 INT 的最大值,要么将你的列强制转换为 UNSIGNED INT,要么使用 BIGINT 列。 See the manual for the limits。另外,请考虑您的列是否实际上应该是 autoinc。诠释。 0123012301230123 中的前缀 0 可能会让我认为 char 列可能更适合它的用途。
  • 请注意,自动增量只有在您没有为该列提供任何值时才有效。
  • @Wrikken 很好,我去看看! Tnks .
  • @nos tnks 将我还押
  • @Wrikken UNSIGNED 仅用于 INT 对吗?在这种情况下,我使用的是 VARCHAR,实际上是在我第一次使用 INT 但出现错误时。然后我更改为 VARCHAR。当然我需要显示 0,以 0 开头的卡片很少。

标签: mysql sql


【解决方案1】:

INT 有一个maximum signed value of 2147483647。任何大于该值的数字都将被截断为该值。您需要做的是将该列更改为varchar(20),它将最多包含20 个字符的字符串,因为银行卡号是字符串而不是实际数字(您不使用数学)。您还应该删除 AUTO_INCREMENT,因为这不是您要递增的值。

【讨论】:

  • 感谢就像一个魅力。花时间试图弄清楚。拯救了我的一天!
【解决方案2】:

有些事情要问自己。这个数字是怎么变得这么大的?我没有插入 20 亿行!

嗯,可能你“烧掉”了那么多AUTO_INCREMENT id。这可以通过多种方式发生:

INSERT IGNORE ... -- when the insert is ignored (because it the row already exists)
REPLACE
IODKU

可能还有其他人。

【讨论】:

    【解决方案3】:

    使用 MySQL phpmyadmin 面板,这就是我摆脱这个问题的方法

    >Go to your Table's structure from  phpmyadmin panel
    >> select that PRIMARY column , click on change
    >>> Change Column type to "BIGINT" and Attributes to "unsigned"
    

    使用其他 SQL > 将列属性更改为“BIGINT unsigned” 对我有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-05
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      • 2017-11-28
      • 1970-01-01
      相关资源
      最近更新 更多