一直以为mysql不区分大小写,直到今天遇到一个mysql字符集的问题,记录下:
我在测试过程中发现当用户名输入为大写时,后端返回的数据正常,但是当用户名输入为小写时,数据就返回为空。一层层往上找时,发现在建表过程中有两张权限表,不知被哪个老哥设置了排序规则为 utf8_bin,结果导致了上面的问题。
趁着这个机会,了解了一波mysql 的排序规则,主要就是:
1、utf8_general_ci 不区分大小写,utf8_general_cs 区分大小写
2、utf8_bin 区分大小写 将字符串每个字符串用二进制数据编译存储
3、ci是 case insensitive, 即 "大小写不敏感", cs是 case sensitive, 即 "大小写敏感"
4、utf8_general_ci速度比较快,一般选用utf8_general_ci就可以了
修改表的字符集和排序规则:
ALTER TABLE 表名 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;