mysql

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.png

3.1 MySQL的默认字符集

image.png

4、如何实现mysql查询大小写是敏感的

4.1 在查询sql中加入binary关键字

image.png

4.2 在创建表的时候进行限制

`user_code` varchar(32) BINARY NOT NULL COMMENT '用户代码'
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)字段内容默认情况下是大小写不敏感的;

上一篇 下一篇

猜你喜欢

热点阅读