今天遇到一个情况,前台验证用户昵称的时候发现无论输入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;
你以为躲起来就找不到你了吗?没有用的!象你这样出色的男人,无论在什么地方,都像漆黑中的萤火虫一样,那样的鲜明,那样的出众。你那忧郁的眼神,稀嘘的胡喳子,神乎其神的刀法,和那杯Dry Martine,都深深地迷住了我!