最近在使用mysql,发现在查询的时候不区分大小写
即 select * from user where username like '%ab%';
select * from user where username like '%Ab%';
select * from user where username like '%aB%';
这三条语句查询出来的结果是一样的,然后查看了下帮助文档,发现这跟mysql字符集对应的默认的校对规则有关。
用 select collation; 可以查看校对规则,collation 以 "_ci"结尾的不区分大小写,以"_bin"或者"_cs"结尾的区分大小写。
用 select charset; 可以查看字符集以及字符集对应的默认校对规则(default collation);
发现大部分的字符集对应的默认校对规则都是不区分大小写的,只有极少数的几个字符集对应的默认校对规则是区分大小写的。
我用的是uft8,可以用 select collation like '%utf%'; 查看utf8对应的校对规则发现有一个校对规则"utf8_bin"是不区分大小写
已经建好的表可以用alter修改表结构指定某一列的校对规则:
alter table table_name modify column column_name varchar(20) character set utf8 collate utf8_bin;
或者创建表的时候也可以指定某一列的校对规则:
create table table_name
(
column_name varchar(20) character set character_name collate collation_name
);
如果指定了character set character_name和collate collation_name,就采用character set character_name和collate collation_name。
如果指定了character set character_name而没有指定collate collation,那么就采用character set character_name和character set character_name的默认校对规则。
character set 和 collate 子句是标准的SQL。
最后说明下我用的操作系统是window XP,mysql 版本为5.0