【发布时间】:2019-03-12 06:22:12
【问题描述】:
我有一个数据类型为"enum('IE','IS')" 的表"temp_enum_test1"。当我尝试通过将数据类型从“ENUM”更改为VARCHAR 来更改表时,出现重复条目错误。它正在接受ENUM 类型的记录。即使当我查询表时,我也会得到唯一的行。任何人都可以在这里帮助我。以下是架构和我的方法。
mysql> CREATE TABLE temp_enum_test1 (
-> r_id int(11) NOT NULL,
-> r_type enum('IE','IS'),
-> UNIQUE KEY uk_temp_enum_test1 (r_id,r_type)
-> );
Query OK, 0 rows affected (0.38 sec)
mysql> insert into temp_enum_test1 values(1,'IE');
Query OK, 1 row affected (0.07 sec)
mysql> insert into temp_enum_test1 values(1,'IS');
Query OK, 1 row affected (0.05 sec)
mysql> select * from temp_enum_test1;
+------+--------+
| r_id | r_type |
+------+--------+
| 1 | IE |
| 1 | IS |
+------+--------+
2 rows in set (0.00 sec)
mysql> alter table temp_enum_test1 change column r_type r_type varchar(30);
ERROR 1062 (23000): Duplicate entry '1-I' for key 'uk_temp_enum_test1'
mysql>
【问题讨论】:
-
对我来说很好。使用 mysql 8.0
-
哦,但是我使用的是 MySQL 5.7,似乎英国索引仅为 ENUM 类型的第一个字符我不确定。
-
奇怪的行为。如果您删除唯一键,更改列,然后将唯一键添加回 db-fiddle.com/f/rBUVXxyWaneq4SpNJp4sdL/1,它工作正常
-
谢谢@Nick,我想我应该采用这种方法
-
@Vivek 你应该让这个问题保持开放。更熟悉 MySQL 的人可能知道其中的原因。
标签: mysql sql enums alter mysql-5.7