MySQL字符集和排序规则在使用中需要注意的点
在建表时字符集设置成:utf8mb4
。
排序规则 utf8mb4_general_ci ,对字母的大小写不敏感。而 utf8mb4_bin 排序规则,对字符大小写敏感,也就是区分大小写。由此,字符排序规则一定要根据实际的业务场景选择,否则容易出现问题。
字符集
mysql 中支持的字符集
有很多,常用的有:latin1、utf-8、utf8mb4、GBK 等。
这 4 种字符集情况如下:
latin1
容易出现乱码问题,在实际项目中使用比较少。
而 GBK
支持中文,但不支持国际通用字符,在实际项目中使用也不多。
从目前来看,mysql 的字符集使用最多的还是:utf-8
和 utf8mb4
。
其中 utf-8
占用 3 个字节,比 utf8mb4
的 4 个字节,占用更小的存储空间。
但 utf-8 有个问题:即无法存储 emoji 表情,因为 emoji 表情一般需要 4 个字节。
由此,使用 utf-8 字符集,保存 emoji 表情时,数据库会直接报错。
所以,建议在建表时字符集设置成:utf8mb4
,会省去很多不必要的麻烦。
排序规则
不知道,你关注过没,在 mysql 中创建表时,有个 COLLATE
参数可以设置。
例如:
1 | CREATE TABLE `order` ( |
它是用来设置排序规则
的。
字符排序规则跟字符集有关,比如:字符集如果是 utf8mb4
,则字符排序规则也是以:utf8mb4_
开头的,常用的有:utf8mb4_general_ci
、utf8mb4_bin
等。
其中 utf8mb4_general_ci 排序规则,对字母的大小写不敏感。说得更直白一点,就是不区分大小写。
而 utf8mb4_bin 排序规则,对字符大小写敏感,也就是区分大小写。
说实话,这一点还是非常重要的。
假如 order 表中现在有一条记录,name 的值是大写的 YOYO,但我们用小写的 yoyo 去查,例如:
1 | select * from order where name='yoyo'; |
如果字符排序规则是 utf8mb4_general_ci,则可以查出大写的 YOYO 的那条数据。
如果字符排序规则是 utf8mb4_bin,则查不出来。
由此,字符排序规则一定要根据实际的业务场景选择,否则容易出现问题。