mysql错误1062

2mbi3lxu  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(402)

我有一张这样的table:

CREATE TABLE t1 (
    id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    col1 VARCHAR(256),
    UNIQUE INDEX t1_col1_index (col1)
)

我正在尝试使用以下查询修改col1类型:

ALTER TABLE t1 MODIFY COLUMN col1 varchar(191) COLLATE utf8mb4_unicode_ci;

但是,我遇到了这个重复错误:
错误:(“1062”,“qmysql3:无法执行语句”,“键“t1\u col1\u index”的重复条目“+123456789”)
我最初认为可能是因为两行或更多行可能“包含”col1的类似值,并且在更改varchar长度时,数据会被截断,但后来我发现数据截断甚至不允许查询通过。有什么线索能说明是什么导致的吗?
编辑(已解决):如果没有用严格的\u trans\u表设置@sql\u模式,则会发生截断。这是导致错误的原因。

sauutmhj

sauutmhj1#

您正在减少由 UNIQUE 约束。
这是一件冒险的事。过大的数据将被自动修剪(除非您有 @@sql_mode 设置为 STRICT_TRANS_TABLES 在这种情况下会出现错误)。这可能会生成重复项,从而导致错误由 UNIQUE 约束。
您可以使用以下选项检查列中值的最大长度:

SELECT MAX(CHAR_LENGTH(col1)) FROM t1:
pbgvytdp

pbgvytdp2#

我不确定这是不是工作。
试着检查一下table t1 .

select count(1) from t1 where col1 = 123456789

如果count大于1,那么尝试删除另一个,只留下一条记录。
然后再做一遍陈述。
提醒:做什么 back up 先拆再拆。

相关问题