我的enum
字段包含同一个字母的lowercase
和uppercase
字段,
当我尝试更新行并更改值时,它不起作用。
这是重现问题的方式:
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');
现在,当我尝试将strategy
从g
更改为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
答案 0 :(得分:5)
来自doc:
检索时,使用列定义中使用的字母大小显示存储在ENUM列中的值。请注意,可以为ENUM列分配字符集和排序规则。对于二进制或区分大小写的排序规则,在为列分配值时会考虑使用字母。
所以你必须改变column collation。
答案 1 :(得分:3)
我的解决方案是将整理更改为ASCII:
ALTER TABLE `your_table` CHANGE `strategy` ENUM('g', 'G', 'r', 'R')
CHARACTER SET ASCII COLLATE ascii_bin NOT NULL DEFAULT 'g';