今天在进行系统查询出了点问题,经核对是由于通过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;
创建表的时候可以不设置编码,这样默认会继承数据库的编码规则,以免混乱。
可以参考网上的另外一篇文章:点击打开参考文章