MySQL查询不区分大小写问题

现象

在使用MySQL字符串查询的时候遇到这么一个问题,查询没有区分大小写,如下图所示


image.png

查询name的时候,使用A去查询或者使用a去查询,结果是一样的。

限定讨论范围

  1. 仅讨论表的创建;
  2. 仅讨论表中列值的大小写查询问题;
  3. 仅讨论字符集编码utf8,排序规则utf8_general_ci,utf8_bin;

原因

MySQL字符集与排序规则

首先要说到MySQL的字符集与排序规则,在创建一张表时,可以指定表的字符集与排序规则,也可以指定列的字符集排序规则。(本文不讨论数据库各个级别配置对列的字符集和排序规则的影响)。影响查询结果的是该列的排序规则,如上文中中展示的查询结果,name字段设置的排序规则就是utf8_general_ci。如果通过命令修改name列的排序规则为utf8_bin,则查询时候能够区分大小写,如下图所示。


image.png

在确定了字符集后,影响查询是否支持大小写的是列的排序规则。

总结

字符集是一套符号和编码,而排序规则则是在字符集内用于比较字符的一套规则。仅针对使用MySQL中utf8的的字符集,将英文字母“A”与“a”编码存入磁盘,所以读取出来的数据是区分大小写的。但是在查询的时候,从磁盘中获取utf8解码后的字符,再通过排序规则来比较,如果使用的是utf8_general_ci,则查询过程中不区分大小写,如果使用的是utf8_bin,则查询过程区分大小写。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容