mysql枚举不区分大小写,它匹配第一个没有case-sensivity的

Moh*_*eri 8 mysql enums case-sensitive lowercase uppercase

我有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');
Run Code Online (Sandbox Code Playgroud)

现在,当我试图改变strategy来自gG它不工作:

UPDATE `mytable` SET `strategy`='G' WHERE id=1;
Run Code Online (Sandbox Code Playgroud)

它返回:

Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0
Run Code Online (Sandbox Code Playgroud)

我用MySQL 5.5,请帮帮我

编辑:

正如@farshad在评论中提到的那样,它使用第一场比赛,如果我改变顺序enum并使用'G','g',...它将永远使用G,你不能将其改回g

小智 5

来自doc:

检索时,使用列定义中使用的字母显示存储在ENUM列中的值.请注意,可以为ENUM列分配字符集和排序规则.对于二进制或区分大小写的排序规则,在为列分配值时会考虑字母大小写.

因此,您必须更改列排序规则.


Far*_*had 5

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

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