我这说的是在执行sql时,对数据区分大小写。
如果不区分大小写,那么sql1:select * from testtable where name='abc'; 和 sql2 : select * from testtable where name = 'ABC'; 搜索效果是一样的。这样显然不合理。
这次遇到过这样的情况,所以备忘一下。
原因就是 table 的 “collation” 是 "utf8_general_ci"的。这个可以通过Navicat 工具看表属性,有一个叫做“整理”的属性。这个 collation 中文叫做 核对集 。
不知其他情况,我这编码全部使用的是 utf8,的字符集,那么默认的核对集就是 utf8_general_ci,我不想要这个,因为不区分大小写,我需要它变成区分大小写的 utf8_bin 。
如果数据库还没有建立,那么可以在 (linux) /etc/my.cnf 的[mysqld] 下,写上:
collation_server=utf8_bin 。如果已经存在这个key,那修改它。如此,再建库建表,就都是utf8_bin 的核对集了。
如果表已经建立好,需要修改核对集,那么使用下面的语句:
alter table test convert to character set utf8 collate utf8_bin;
这样既可。对所有表进行逐一修改。
注意,如果遇到某个表被别的表 foreign references 了的话,就需要先执行语句:
SET FOREIGN_KEY_CHECKS=0;
然后再执行 上面的 alter 语句,否则会报错。