mysql数据大小写不敏感问题分析
起因
账号导入校验账号列表是否在
authcenter
存在,返回存在的数据。
查询sql
sql
SELECT id, account from ac_account where account = 'Shao'; # 查询大写字符
结果(返回小写字符)
id | account |
---|---|
1519373 | shao |
authcenter返回的数据格式
格式如下
就是一个Map
,key
是用户名
或手机号
,value
是用户id,
入参
Shao
返回
{
"shao": 1519373
}
usercenter接收返回数据
根据在返回的map.get("Shao")
,自然就为null
了
解决方案
用CaseInsensitiveMap
包装,忽略大小写
以上为大小写不敏感情况下的解决方案
延伸
大小写敏感该怎么做?
因为当前数据库配置默认的字符集为utf8mb4
,默认排序规则为utf8mb4_general_ci
若业务需要大小写敏感,可改变字段的排序规则建议将表字段
的排序规则
改为utf8mb4_bin
查看字符集
SHOW CHARACTER SET;
查看某个字符集的排序规则
SHOW COLLATION WHERE Charset = 'utf8';
排序规则命名约定见https://dev.mysql.com/doc/refman/5.7/en/charset-collation-names.html
ps: 在大学的时候,其实就了解过字符集与排序规则的差异,这次就当复习一遍了~
有三个字送给你,
一是“诚”,
二是“勤”,
三是“专”。
当你无比地想做成一件事,
愿意为它倾尽无数心血和努力时,
结果总不会太差。
一是“诚”,
二是“勤”,
三是“专”。
当你无比地想做成一件事,
愿意为它倾尽无数心血和努力时,
结果总不会太差。