#1062 - 重复录入

时间:2016-03-11 15:10:24

标签: php mysql duplicates record

我正在研究自己的项目,但我有一个问题。

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

CONTAINER ID        IMAGE                                         COMMAND             CREATED             STATUS              PORTS                                        NAMES
8414f19fcd5f        b.gcr.io/tensorflow/tensorflow:latest-devel   "/bin/bash"         38 minutes ago      Up 23 minutes       6006/tcp, 8888/tcp, 0.0.0.0:8888->9999/tcp   test

当我尝试使用

添加新记录时
$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)
)";

它返回错误

  

#1062 - 密钥'cod_barre'重复输入'2147483647'

但显然cod_barre不等于这个值。 如果我尝试使用UPDATE修改记录,它会修改除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)"; 我使用php.ini es ENGINE和InnoDB作为char_set。 任何人都可以帮我找到错误吗?

1 个答案:

答案 0 :(得分:1)

在你的情况下,你去INT最大2147483647 = 2^{31}-1,因为4545415615456大于2147483647。

所以你真的插入了带有max 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)
)";