我的enum字段包含相同字母的lowercaseuppercase
当我尝试更新行并更改值时,它不起作用。

这是重现问题的方法:

CREATE TABLE `mytable` (
  `id` bigint(20) NOT NULL,
  `name` varchar(100) NOT NULL,
  `strategy` enum('g','G','r','R') NOT NULL DEFAULT 'g'
) ENGINE=InnoDB;

INSERT INTO `mytable` VALUES(1,'test','g');

现在,当我尝试将strategyg更改为G时,它不起作用:
UPDATE `mytable` SET `strategy`='G' WHERE id=1;

它返回:
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

我使用MySQL 5.5,请帮帮我

编辑:

正如@farshad在他的评论中提到的那样,
它使用第一个匹配项,如果我更改enum的顺序并使用'G','g',...,它将始终使用G,并且您无法将其更改回g

最佳答案

我的解决方案是将排序规则更改为ASCII:

ALTER TABLE `your_table` CHANGE `strategy` ENUM('g', 'G', 'r', 'R')
CHARACTER SET ASCII COLLATE ascii_bin NOT NULL DEFAULT 'g';

关于mysql枚举不区分大小写,它匹配第一个,不区分大小写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31827387/

10-12 21:46