MySQL查询不区分大小写的问题总结

时间:2023-01-31 18:56:06

MySQL查询不区分大小写问题

1. 问题描述

最近,笔者在开发 Flea Auth 模块的过程中,准备验证以注册的账号huazie进行登录的场景,结果以HUAZIE成功登录,而数据库中存储的账号是huazie。 MySQL查询不区分大小写的问题总结

2. 问题分析

简单分析了代码,发现了MySQL查询语句出现如下的现象: MySQL查询不区分大小写的问题总结MySQL查询不区分大小写的问题总结 上述数据库里 account_code 是小写,我们再来试一下数据库里 account_code 是大写的场景: MySQL查询不区分大小写的问题总结MySQL查询不区分大小写的问题总结

显然,不管 account_code 字段在查询语句里值的大小写如何,都可以查询到数据库的数据。

这就引出了MySQL查询不区分大小写的问题

我们首先来看下 account_code 字段的设计:

MySQL查询不区分大小写的问题总结 查询 MySQL中文文档--MySQL中的字符集和校对 可知如下: MySQL查询不区分大小写的问题总结 恍然大悟,醍醐灌顶,上述采用的 排序规则 为 utf8_general_ci,其中 ci 表示 大小写不敏感。

  • ci (case insensitive) : 大小写不敏感,即不区分大小写
  • cs (case sensitive) : 大小写敏感,即区分大小写
  • bin (binary)二元校对规则,采用二进制进行编码,也是区分大小写

好了,原因已经了解到了,感兴趣的朋友可以继续了解 MySQL中文文档--第10章:字符集支持

3. 问题解决

既然原因已经找到了,我们来尝试修改下 account_code 字段的排序规则,如下: MySQL查询不区分大小写的问题总结

现在我们运行一下查询语句试下效果: MySQL查询不区分大小写的问题总结MySQL查询不区分大小写的问题总结 由上图可知,目前MySQL的查询已经区分大小写了。