mysql 更改 table 修改列期间出现错误 1062
mysql error 1062 during alter table modify column
我有一个 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;
然而,我运行陷入了这个重复错误:
error: ("1062", "QMYSQL3: Unable to execute statement", "Duplicate entry '+123456789' for key 't1_col1_index'")
我最初认为这可能是因为两行或多行可能 'contain' col1 的相似值并且在更改 varchar 长度时数据得到 t运行cated 但后来我发现数据 t运行cation 甚至不允许查询通过。关于可能导致此问题的任何指示?
编辑(已解决):当@@sql_mode 未设置为 STRICT_TRANS_TABLES 时,确实会发生 T运行阳离子。这是导致错误的原因。
我不确定这是否有效。
尝试检查 table t1
。
select count(1) from t1 where col1 = 123456789
现在,如果计数大于 1,则尝试删除另一个,只留下一条记录。
然后再尝试运行你的语句。
温馨提示:
在删除之前先执行 back up
。
您正在减少由 UNIQUE
约束控制的 varchar 列的长度。
这是有风险的事情。超大数据将被静默修剪(除非您将 @@sql_mode
设置为 STRICT_TRANS_TABLES
,在这种情况下会引发错误)。这可能会生成重复项,从而导致 UNIQUE
约束引发错误。
您可以使用以下方法检查列中值的最大长度:
SELECT MAX(CHAR_LENGTH(col1)) FROM t1:
我有一个 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;
然而,我运行陷入了这个重复错误:
error: ("1062", "QMYSQL3: Unable to execute statement", "Duplicate entry '+123456789' for key 't1_col1_index'")
我最初认为这可能是因为两行或多行可能 'contain' col1 的相似值并且在更改 varchar 长度时数据得到 t运行cated 但后来我发现数据 t运行cation 甚至不允许查询通过。关于可能导致此问题的任何指示?
编辑(已解决):当@@sql_mode 未设置为 STRICT_TRANS_TABLES 时,确实会发生 T运行阳离子。这是导致错误的原因。
我不确定这是否有效。
尝试检查 table t1
。
select count(1) from t1 where col1 = 123456789
现在,如果计数大于 1,则尝试删除另一个,只留下一条记录。
然后再尝试运行你的语句。
温馨提示:
在删除之前先执行 back up
。
您正在减少由 UNIQUE
约束控制的 varchar 列的长度。
这是有风险的事情。超大数据将被静默修剪(除非您将 @@sql_mode
设置为 STRICT_TRANS_TABLES
,在这种情况下会引发错误)。这可能会生成重复项,从而导致 UNIQUE
约束引发错误。
您可以使用以下方法检查列中值的最大长度:
SELECT MAX(CHAR_LENGTH(col1)) FROM t1: