今天遇到一个情况,前台验证用户昵称的时候发现无论输入Fred fred亦或是FrEd 都会显示昵称存在(这并不是我所期望的结果)
debug发现并不是程序问题 hibernate也只是吧hql装成mysql 最后发现是mysql本身的问题(不区分大小写)该字段类型围utf-8
通过查询资料发现需要设置collate(校对) 。 collate规则:
*_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的
*_cs: case sensitive collation,区分大小写
*_ci: case insensitive collation,不区分大小写
解决方法
1.可以将查询条件用binary()括起来。 比如: select * from TableA where columnA like binary('aaa');
- 可以修改该字段的collation 为 binary 字符集还是utf-8 改了排序规则为utf-8-bin(使用的navicate for mysql工具)
如:
ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;