我有一张这样的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模式,则会发生截断。这是导致错误的原因。
2条答案
按热度按时间sauutmhj1#
您正在减少由
UNIQUE
约束。这是一件冒险的事。过大的数据将被自动修剪(除非您有
@@sql_mode
设置为STRICT_TRANS_TABLES
在这种情况下会出现错误)。这可能会生成重复项,从而导致错误由UNIQUE
约束。您可以使用以下选项检查列中值的最大长度:
pbgvytdp2#
我不确定这是不是工作。
试着检查一下table
t1
.如果count大于1,那么尝试删除另一个,只留下一条记录。
然后再做一遍陈述。
提醒:做什么
back up
先拆再拆。