MySQL查询大小写不敏感
2023-12-31 本文已影响0人
HachiLin
1、问题背景
在某一次需求中,测试同学提出了以下疑问:为何数据库存储的是hgb,但是实际使用HGB落库的时候,其实会报异常!
image.png
2、mysql中的charset和collate
2.1 charset
● 简介
CHARSET 用于设置字符集,字符集是用于编码字符的规则集。常用的字符集包括 utf8 和 utf8mb4,分别用于编码普通的文本和包含Emoji等特殊字符的文本。
● 常用字符集及占用的字节数
使用如下命令可以查看mysql支持的字符集:
SHOW CHARACTER SET;
image.png
2.2 collate
● 简介
mysql的排序规则,数据库中涉及字符类型(varchar、char、text)的排序,比较(order by、where中的大小比较)都和collate有关。
● 排序规则遵循原则
(1)以_ci(表示大小写不敏感)
(2)以_cs(表示大小写敏感)
(3)以_bin(表示用编码值进行比较)
3、查询大小写不敏感的表结构
image.png3.1 MySQL的默认字符集
image.png4、如何实现mysql查询大小写是敏感的
4.1 在查询sql中加入binary关键字
image.png4.2 在创建表的时候进行限制
- 方法1
`user_code` varchar(32) BINARY NOT NULL COMMENT '用户代码'
- 方法2
CREATE TABLE `user` (
`user_id` varchar(32) NOT NULL COMMENT '主键',
`user_code` varchar(32) NOT NULL COMMENT '用户代码, 全小写',
......
PRIMARY KEY (`user_id`) USING BTREE,
UNIQUE KEY `uk_system_code_user_code` (`system_code`,`user_code`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用户表'
5、其它注意事项
(1)数据库名和表名是严格区分大小写的;
(2)表的列名是严格区分大小写的;
(3)列名与列的别名在所有的情况下均是忽略大小写的;
(4)字段内容默认情况下是大小写不敏感的;