当前位置:   article > 正文

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

mysql不区分大小写

1. 问题描述

最近,笔者在开发 Flea Auth 模块的过程中,准备验证以注册的账号huazie进行登录的场景,结果以HUAZIE成功登录,而数据库中存储的账号是huazie。
在这里插入图片描述

2. 问题分析

2.1 现象分析

简单分析了代码,发现了MySQL查询语句出现如下的现象:
在这里插入图片描述
在这里插入图片描述
上述数据库里 account_code 是小写,不论我们的查询语句中的 account_code 查询条件是大写还是小写,都是可以查出来的。

下面,我们再来试一下数据库里 account_code 是大写的场景:
在这里插入图片描述
在这里插入图片描述
如上数据库里 account_code 是大写,不论我们的查询语句中的 account_code 查询条件是大小写混合还是小写还是大写,也都是可以查出来的。

2.2 总结分析

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

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

我们首先来看下 flea-auth 授权模块下用户表中 account_code 字段的设计:
在这里插入图片描述
通过查询 MySQL中文文档–MySQL中的字符集和校对 ,在文章的最后,可知看到如下的内容:

校对规则一般有这些特征:

  • 两个不同的字符集不能有相同的校对规则。

  • 每个字符集有一个默认校对规则。例如,latin1默认校对规则是 latin1_swedish_ci

  • 存在校对规则命名约定:它们以其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或 _bin(二元)结束。

恍然大悟,醍醐灌顶,我们上述采用用户表的 排序规则 为 utf8_general_ci,其中 ci 就表示 大小写不敏感。

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

好了,既然原因已经了解到了,那么就可以开始着手解决了。

感兴趣的朋友可以继续了解 MySQL中文文档–第10章:字符集支持

3. 问题解决

下面,我们来尝试修改下 account_code 字段的排序规则,如下所示:

在这里插入图片描述

现在我们再来运行一下查询语句试下效果:
在这里插入图片描述
在这里插入图片描述

由上图可知,目前 MySQL 的查询已经区分大小写了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/677246
推荐阅读
相关标签
  

闽ICP备14008679号