字符集和比较规则

字符集的概念:

人们抽象出一个字符集的概念来描述某个字符范围的编码规则。

比较规则的概念:

对于某一种字符集来说,可以制定用来比较字符大小的多种规则,也就是说同一种字符集可以有多种规则。

最常用的 UTF-8 字符集在表示一个字符时需要使用1 ~ 4个字节,但是我们常用的一些字符使用1 ~ 3个字符就可以了。

在设计上,MySQL定义了下面两个概念

  • utf8mb3:“阉割” 过的UTF-8字符集,只使用1~3个字节表示字符。
  • utf8mb4:正宗的UTF-8字符集,使用1~4个字节表示字符。

在 MySQL8.0 中,MySQL 的默认字符集是 utf8mb4 。

一个字符集可以有多种比较规则

可以用show charset; 命令查看。



mysql字符集什么意思 mysql字符集详解_数据库


mysql字符集什么意思 mysql字符集详解_mysql_02

其中:

  • ai:不区分重音
  • as:区分重音
  • ci:不区分大小写
  • cs:区分大小写
  • bin:以二进制方式比较

character_set_server: 当前服务器的字符集

collation_server: 当前服务器的比较规则

可以用 show varlables like ‘上述的两个’ 来查看。

character_set_database: 当前数据库的字符集

collation_database: 当前了数据库的比较规则

查看方式和上述所说的一样。

字符集和比较规则分几个级别:

  • 服务器级别
  • 数据库级别
  • 表级别
  • 列级别

每个级别的字符集都是可以进行调整,有相关的命令。

继承关系:

在创建数据库的时候如果不显式指定字符集和比较规则,这时候将使用服务器级别的比较规则。

在创建表的时候如果不显式指定字符集和比较规则,这时候将使用数据库级别的比较规则。

在创建列的时候如果不显式指定字符集和比较规则,这时候将使用表级别的比较规则。

最后,如果客户端和服务端的所用的字符集不一致可能会导致乱码;如果在排序的时候所得到的结果与预期不一致,可能是比较规则没设置好。