今天遇到一个情况,前台验证用户昵称的时候发现无论输入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');

  1. 可以修改该字段的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,都深深地迷住了我!