MYSQL 查询字符串大小写不敏感
今天在测试修改用户名的时候,在修改用户名为
nbnb
后,发现前端展现的时候却是:NBNB
。于是就排查了下数据库,发现数据库的记录也是NBNB
. 接着,就使用了nbnb
来作为查询条件查询数据,依然能够查询到结果。郁闷了。。。
错误原因:
MySQL 在查询字符串时是大小写不敏感的,在编译MySQL 时一般以ISO-8859 字符集作为默认的字符集,
这个字符集对大小写不敏感
,因此在比较过程中中文编码字符大小写转换造成了这种现象。
解决方案:
方案一:
解决方法是对于包含中文的字段加上 binary
属性,使之作为二进制比较,例如将username char(30)
修改成username char(30) binary
。
方案二:
在使用源码编译MySQL时,可以在编译的时候使用 --with-charset=gbk
参数,这样MySQL 就会直接支持中文查找和排序了。
方案三:
可以使用MySQL 的locate 函数来判断。以上述问题为例,使用方法为:
SELECT * FROM user_info WHERE locate('username', '赵冲') > 0;
方案四:
把SELECT 语句修改成:
SELECT * FROM user_info WHERE username LIKE BINARY '%FIND%'
方案五:
如果你在Windows下使用已经编译好的MySQL,可以修改My.ini中的字符集选项。
default-character-set = gb2312