MySQL查询不区分大小写问题
1. 问题描述
最近,笔者在开发 Flea Auth 模块的过程中,准备验证以注册的账号huazie进行登录的场景,结果以HUAZIE成功登录,而数据库中存储的账号是huazie。
2. 问题分析
简单分析了代码,发现了MySQL查询语句出现如下的现象: 上述数据库里 account_code 是小写,我们再来试一下数据库里 account_code 是大写的场景:
显然,不管 account_code 字段在查询语句里值的大小写如何,都可以查询到数据库的数据。
这就引出了MySQL查询不区分大小写的问题
我们首先来看下 account_code 字段的设计:
查询 MySQL中文文档--MySQL中的字符集和校对 可知如下: 恍然大悟,醍醐灌顶,上述采用的 排序规则 为 utf8_general_ci,其中 ci 表示 大小写不敏感。
- ci (case insensitive) : 大小写不敏感,即不区分大小写
- cs (case sensitive) : 大小写敏感,即区分大小写
- bin (binary) :二元校对规则,采用二进制进行编码,也是区分大小写
好了,原因已经了解到了,感兴趣的朋友可以继续了解 MySQL中文文档--第10章:字符集支持。
3. 问题解决
既然原因已经找到了,我们来尝试修改下 account_code 字段的排序规则,如下:
现在我们运行一下查询语句试下效果: 由上图可知,目前MySQL的查询已经区分大小写了。
标签:account,code,区分,查询,大小写,MySQL From: https://blog.51cto.com/huazie/6029856