MySQL查询时如何区分大小写

默认情况下,MySQL表字段的校对规则Collation属性为utf8mb4_general_ci,表示不区分大小写。如果想区分大小写可以将表字段的Collation属性修改为utf8mb4_general_cs,但是这种方式不够灵活,因为一般只有少数场景查询时会需要严格区分大小写。

那我们有什么办法可以不需要修改表结构,直接实现区分大小写的查询吗?答案是可以的,只需要在查询条件之前增加一个binary关键字即可。相当于告诉MySQL,这个字段在匹配时需要以二进制的形式匹配(二进制必定区分大小写,因为A和a在存储时二进制就是不一样的)

测试数据

create table `demo`(
    `id` bigint(20) not null auto_increment comment '主键id',
    `name` varchar(32) not null default '' comment '姓名',
    primary key (`id`)
) engine=innodb auto_increment=1000 default charset=utf8mb4 comment='demo表';

insert into test.demo (name) values
     ('A'),
     ('a');

默认不区分大小写

select * from demo where name = 'a';

id  |name|
----+----+
1000|A   |
1001|a   |

增加binary关键字区分大小写

select * from demo where binary name = 'a';

id  |name|
----+----+
1001|a   |

需要注意的是,binary的影响范围为他之后的第一个查询字段。如这个例子,binary只影响到id字段,name字段查询还是不区分大小写。

select * from demo where binary id!=0 and name = 'a';

id  |name|
----+----+
1000|A   |
1001|a   |

觉得内容还不错?打赏个钢镚鼓励鼓励!!👍