【问题标题】:#1062 - Duplicate entry#1062 - 重复条目
【发布时间】:2016-06-26 21:35:06
【问题描述】:

我正在做自己的项目,但我遇到了问题。

我用查询创建了一个简单的表:

$sql_art = "CREATE TABLE articoli (
    id INT(3) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    cod_int VARCHAR(6) NOT NULL,
    nome VARCHAR(50) NOT NULL,
    descr VARCHAR(100) NULL,
    cod_barre INT(20) NOT NULL,
    prezzo INT(5) NULL,
    note VARCHAR(100) NULL,
    reg_date TIMESTAMP,
    UNIQUE (cod_barre)
)";

当我尝试添加新记录时

$sql_ins = "INSERT INTO `gestionale_db`.`articoli` 
(`id`, `cod_int`, `nome`, `descr`, `cod_barre`, `prezzo`, `note`, `reg_date`) 
VALUES 
(NULL, 'A001', 'Cazzilli', 'ancora caldi', '4545415615456',
   '215', 'su tisi', CURRENT_TIMESTAMP)";

返回错误

#1062 - 键“cod_barre”的重复条目“2147483647”

但显然 cod_barre 不等于这个值。 如果我尝试使用 UPDATE 修改记录,它会修改除 cod_barre 之外的所有值,这些值保持不变。 默认情况下,在php.ini 中,我使用InnoDB es ENGINE 和latin1_swedish_ci 作为char_set。 谁能帮我找出错误?

【问题讨论】:

标签: php mysql duplicates record


【解决方案1】:

在您的情况下,您将转到 INT 最大值 2147483647 = 2^{31}-1,因为 4545415615456 大于 2147483647。

所以你真的插入了具有最大 int 值的行。 您需要创建此表来修复您的错误:

$sql_art = "CREATE TABLE articoli (
    id INT(3) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    cod_int VARCHAR(6) NOT NULL,
    nome VARCHAR(50) NOT NULL,
    descr VARCHAR(100) NULL,
    cod_barre BIGINT(20) NOT NULL,
    prezzo INT(5) NULL,
    note VARCHAR(100) NULL,
    reg_date TIMESTAMP,
    UNIQUE (cod_barre)
)";

【讨论】:

  • 我遇到了同样的错误,比如 0000048921 之类的数字,其中所有首字母 0 都已删除,或者 65412865 之类的数字小于 2147483647。但是,它可以工作。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
  • 2017-11-28
  • 2011-11-11
  • 2012-07-23
  • 2013-09-30
  • 2015-04-26
相关资源
最近更新 更多