数据库:字符集和排序规则

创建数据库的时候需要选择字符集和排序规则
一般选择utf8字符集和utf8_general_ci排序规则或者utf8mb4字符集和utf8mb4_general_ci排序规则
在这里插入图片描述

字符集

utf8和utf8mb4字符集的区别

utf8mb4兼容utf8,且比utf8能表示更多的字符,所以什么时候你需要存储更多的字符,你就用utf8mb4,否则只是浪费空间;即utf8mb4字符集比utf8字符集存储更多的unicode编码。

据说MySQL一开始没有utf8mb4这个字符集,因为utf8只支持每个字符最多三个字节,而真正的UTF-8是每个字符最多四个字节,这就造成UTF-8编码下的一些字符无法保存到数据库中,为了修复这个bug而出现了utf8mb4这种字符集。

三个字节的UTF-8最大能编码的Unicode字符是0xFFFF,也就是Unicode中的基本多文平面(BMP)。也就是说,任何不在基本多文平面的Unicode字符,都无法使用MySQL原有的utf8字符集存储。这些不在BMP中的字符包括哪些呢?最常见的就是Emoji表情(Emoji是一种特殊的Unicode编码,常见于ios和android手机上),和一些不常用的汉字,以及任何新增的Unicode字符等等。

如果要在MySQL中保存4字节长度的UTF-8字符,就需要使用utf8mb4编码,但是要注意只有5.5.3版本以后的MySQL才支持(查看版本命令:select version();。

排序规则

排序规则概念:
是指对指定字符集下不同字符的比较规则

排序规则特征:
它和字符集(CHARSET)相关
每种字符集都有多种它支持的排序规则
每种字符集都会默认指定一种排序规则为默认值。

排序规则作用:
排序规则指定后,它会影响我们使用 ORDER BY语句查询的结果顺序,会影响到 WHERE条件中大于小于号的筛选结果,会影响 DISTINCT、GROUP BY、HAVING 语句的查询结果。另外,mysql 建索引的时候,如果索引列是字符类型,也会影响索引创建,只不过这种影响我们感知不到。总之,凡是涉及到字符类型比较或排序的地方,都和排序规则有关。

常用排序规则:
utf8_general_ci :不区分大小写,这个你在注册用户名和邮箱的时候就要使用。校对速度快,但准确度稍差。 (准确度够用,一般建库选择这个)
utf8_unicode_ci:它和utf8_general_ci对中、英文来说没有实质的差别。准确度高,但校对速度稍慢。
utf8_bin:字符串每个字符串用二进制数据编译存储,而且可以存二进制的内容,与utf8_general_cs一样,区分大小写
utf8_general_cs:查询时区分大小写匹配

utf8mb4_general_ci和utf8mb4_0900_ai_ci的区别
utf8mb4_0900_ai_ci和utf8mb4_general_ci都是MySQL针对utf8mb4编码的排序规则。
对于utf8mb4_0900_ai_ci来说,0900代表Unicode 9.0的规范,ai表示accent insensitivity,也就是“不区分音调”,而ci表示case insensitivity,也就是“不区分大小写”。
MySQL 8.0之后,默认collation不再像之前版本一样是是utf8mb4_general_ci,而是统一更新成了utf8mb4_0900_ai_ci。

utf8_bin和utf8_general_ci示例
bin 是二进制, a 和 A 会别区别对待
在这里插入图片描述
这时候查出来的是只有一条,证明是区分大小写的。
在这里插入图片描述
在这里插入图片描述
这时候查出来的是有两条,证明是不区分大小写的。
在这里插入图片描述

utf8_general_ci和utf8_general_cs示例
假设数据库中SC_Teacher表存在一条数据,其中TeacherName字段的值为 “A”
查询语句:select * from SC_Teacher where TeacherName = ‘a’
– 如果数据库使用的是utf8_general_ci排序规则, 下面的查询是可以查询到这条数据
– 如果数据库使用的是utf8_general_cs排序规则, 下面的查询是查询不到这条数据

解释CI和CS:
ci的完整英文是’Case Insensitive’, 即“大小写不敏感”,a和A会在字符判断中会被当做一样的;
cs的完整英文是‘Case Sensitive’,即“大小写敏感”,a 和 A 会有区分;

在MySQL数据库中,可以使用show collation;来查看支持的各种排序规则。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_38127564/article/details/128936009
今日推荐