关于mysql查询大小写敏感的问题

    今天在进行系统查询出了点问题,经核对是由于通过mysql查询的时候,默认不区分大小写,例如查询

select * from user where name='aa'
数据库记录中只有name='Aa'的数据,但是也可以查询出来。

此数据库的编码默认是 utf8_general_ci,经上网查询是字符集校对规则的原因,引用如下:

-----------------------------------------------------------------------------------

字符集是一套符号和编码。校对规则是在字符集内用于比较字符的一套规则。任何一个给定的字符集至少有一个校对规则,它可能有几个校对规则。要想列出一个字符集的校对规则,使用SHOW COLLATION语句。


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

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

--------------------------------------------------------------------------------------

mysql的字符集和校对规则有4个级别的默认设置:服务器级、数据库级、表级和连接级。


解决办法如下:

一、修改mysql配置文件

在[mysqld]下添加:collation_server = utf8_bin
重启服务,查询编码:


更改服务器级的校验规则(collation_server )后,数据库校验规则(collation_collation)默认会继承服务器级的。
注意:
    这个只适用于在重新启动之后, 新建的库,已存在的库不受影响.
    同样的, 即使库的校验规则改了,已经存在的表不受修改影响;


二、目前的情况是我只想修改一个数据库,于是使用HeidiSQL修改了数据库和表的编码集为utf8_bin,但是这样会比较麻烦。还可以将此数据库整库导出,然后修改其中的编码规则,再次导入。

create database test default character set utf8 collate utf8_bin;

创建表的时候可以不设置编码,这样默认会继承数据库的编码规则,以免混乱。



可以参考网上的另外一篇文章:点击打开参考文章


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值