平时建数据库,建表啊都没有很在意这个两个规则,应该不只我是没在意这个吧,如果不是出现问题大部分应是选择默认的规则,竟然有这方面的规则。下面查阅下中文官网,一起学习下这方面知识(中文:https://www.mysqlzh.com/doc/95.html,英文:https://dev.mysql.com/doc/refman/8.0/en/charset-general.html)。
字符集和排序的规则含义:
看图可以了解到他们的含义,他们两之间的关系统:“任何一个给定的字符集至少有一个校对规则。它可能有几个校对规则”,意思表达很明确了,至少有一个校对规则,那问题来了平时建库建表没关注到这些,是不是有一个默认的规则,那这规则是什么?下面的继续看看文档信息:
大家可以根据上图查询到数据库维度的配置的默认的规则信息,字符集和校对规则有4个级别的默认设置:服务器级、数据库级、表级和连接级,,我们常用其它维度的比如:表,字段,直接查看表的结构信息就一目了然了,不同维度之间的关系必然是粒度最细最优先,还有一种情况 就是直接在sql中使用COLLATE 命令来定校对规则(这个基本不会用到)。
字符集和排序的规则分类:
种类太多就不易截图了,想知道所有类型可以用上面的命令在数据库查看(https://dev.mysql.com/doc/refman/8.0/en/charset-charsets.html).
常用字符集:
上图可以看出来 utf8mb4与utf8之间的区别了,默认的校对规则不一样,以及最大的长度一个3字节,一个是4字节。其实支持中文支持字符集还有GBK国家标准,那为什么不用GBK了,UTF8是国标准,以及他们存储的对字符存储的字节数也不一样,GBK中英文都双字节,UTF8中文三字节,英文一字节。相对而言UTF8更优一些。
常用校对规则:
介绍时也提到一下校对规则后缀的一些含义,可以很清晰看出来的他们的实际作用。 uft8mb4的校规其实挺多的:
例举一下几个常用的: utf8mb4_bin,utf8mb4_general_ci,utf8mb4_0900_ai_ci,utf8mb4_0900_as_cs,看看资料的描述,
上面提到了_CS他们是大小敏感的,其中_ bin也是大小敏感,注意了这个规则不仅影响着排序的结果,还是影响到大小写的查询结果,再继续看看_ai,_as的是什么含义:
其它注意点:
今天就学习到这里,有其它关键信息的地方后续再补上,散会。