【问题标题】:MySQL ENUM to VARCHAR conversion issueMySQL ENUM 到 VARCHAR 转换问题
【发布时间】: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


【解决方案1】:

问题似乎与创建表查询有关。该表是使用“唯一键”创建的,这在更改表时会导致错误。如果你可以使用

PRIMARY KEY (`r_id`)

而不是...

UNIQUE KEY uk_temp_enum_test1 (r_id,r_type)

如下完成CREATE命令;

CREATE TABLE IF NOT EXISTS temp_enum_test1 (
  `r_id` int(11) NOT NULL AUTO_INCREMENT,
  `r_type` enum('IE','IS') NOT NULL,
  PRIMARY KEY (`r_id`)
)

【讨论】:

  • 实际场景r_id可以复制
  • @vivek true ... r_id 和 r_type 的组合将始终是唯一的,因为在创建表时使用了 UNIQUE 命令(即 UNIQUE KEY uk_temp_enum_test1 (r_id,r_type))
猜你喜欢
  • 2016-03-18
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
相关资源
最近更新 更多