最近在工作中遇到了mySql的大小写敏感问题
首先查看DB环境变量
show variables like 'lower%'
执行结果:
lower_case_file_system:
OFF
表示大小写敏感,ON
表示大小写不敏感。
lower_case_table_names:0
表示敏感,1
表示不敏感。
字段内容大小写敏感问题:
-
建表时对字段使用
binary
,二进制大小写是敏感的CREATE TABLE sys_user ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', username varchar(64) binary NOT NULL COMMENT '用户名', PRIMARY KEY (id) ) COMMENT = '系统用户';
-
在查询条件的字段前加binary,但是不建议这么做,因为会使字段索引失效
SELECT username FROM sys_user WHERE binary username = 'admin';
-
建表时设置校对规则
collate
collate规则:
*_bin: 表示的是binary case sensitive collation - 区分大小写
*_ci: case insensitive collation - 不区分大小写加在表属性上:
CREATE TABLE sys_user ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', username varchar(64) NOT NULL COMMENT '用户名', PRIMARY KEY (id) )CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '系统用户';
也可以加载字段属性上