?? MySQL-05-字符集和校对规则
目录 ?? MySQL-05-字符集和校对规则 1 开篇介绍 2 相关概念 2.1 字符 2.2 字符集 2.3 字符编码 2.4 字符集与字符编码的关系 2.5 校对规则 3 查看 MySQL 当前字符集和校对规则 3.1 查看 MySQL 当前字符集 3.2 查看 MySQL 当前的校对规则 4 MySQL 字符集的转换过程
1 开篇介绍
?? Hello 大家好,我是 Nagase , MySQL 从删库到跑路 ,又到了学习 MySQL 的时刻,接下来就让我们感受一下 MySQL 独特的魅力吧。
在该篇博客中,我们主要介绍 字符集与校对规则 相关的内容,祝你学的开心 ?? 。
2 相关概念
2.1 字符
字符(Character) 是计算机中字母、数字、符号的统称,一个字符可以是一个中文汉字、一个英文字母、一个阿拉伯数字、一个标点符号等。
计算机是以二进制的形式来存储数据的。平时我们在显示器上看到的数字、英文、标点符号、汉字等字符都是二进制数转换之后的结果。
2.2 字符集
字符集(Character set) 定义了 字符 和 二进制 的对应关系,为字符分配了唯一的编号。
常见的字符集: ASCII 、 GBK 、 ISO-8859-1 等。
2.3 字符编码
字符编码(Character encoding) 也可以称为字集码,规定了如何将字符的编号存储到计算机中,是一种规则。
大部分 字符集 都只对应一种 字符编码 ,例如: ASCII 、 IOS-8859-1 、 GB2312 、 GBK ,都是既表示了字符集又表示了对应的字符编码。所以 一般情况 下,可以将两者 视为同义词 。
However, Unicode 字符集除外, Unicode 有三种编码方案,即 UTF-8 、 UTF-16 和 UTF-32 。
最为常用的是 UTF-8 编码。
2.4 字符集与字符编码的关系
字符集 与 字符编码 这两个概念常常会被混淆,但实际上,这两者是有区别的。
字符集 与 字符编码 是两个不同层面的概念:
charset 是 character set 的简写,即:字符集。 encoding 是 charset encoding 的简写,即:字符编码,简称编码。
从图中我们可以看出:
编码是依赖于字符集的,就类似于 Java 中的接口实现依赖于接口一样 一个字符集可以有多个编码,就类似于 Java 中的接口可以有多个实现类一样2.5 校对规则
校对规则(Collation) 也可以称为排序规则,是指在同一个字符集内字符之间的比较规则。
字符集和校对规则是一对多的关系,每个字符集都有一个默认的校对规则。字符集和校对规则相辅相成,相互依赖关联。
3 查看 MySQL 当前字符集和校对规则
简单来说,字符集用来定义 MySQL 存储字符串的方式,校对规则用来定义 MySQL 比较字符串的方式。
有些数据库并 没有 清晰的 区分开 字符集和校对规则。例如,在 SQL Server 中创建数据库时,选择字符集就相当于选定了字符集和校对规则。
而在 MySQL 中,字符集和校对规则是 区分开 的,必须设置字符集和校对规则。一般情况下,没有特殊需求,只设置其一即可。只设置字符集时,MySQL 会将校对规则设置为字符集中对应的默认校对规则。
3.1 查看 MySQL 当前字符集
可以通过 SHOW VARIABLES LIKE ‘character%‘; 命令查看当前 MySQL 使用的字符集,命令和运行结果如下所示:
mysql> SHOW VARIABLES LIKE ‘character%‘; +--------------------------+------------------------------------------------------+ | Variable_name | Value | +--------------------------+------------------------------------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | C:\Program Files\mysql-5.6.51-winx64\share\charsets\ | +--------------------------+------------------------------------------------------+ 8 rows in set (0.00 sec)
上述运行结果含义如下表所示:
名称 说明 character_set_client MySQL 客户端使用的字符集 character_set_connection 连接数据库时使用的字符集 character_set_database 创建数据库使用的字符集 character_set_filesystem MySQL 服务器文件系统使用的字符集,默认值为 binary,不做任何转换 character_set_results 数据库给客户端返回数据时使用的字符集 character_set_server MySQL 服务器使用的字符集,建议由系统自己管理,不要人为定义 character_set_system 数据库系统使用的字符集,默认值为 utf8,不需要设置 character_sets_dir 字符集的安装目录3.2 查看 MySQL 当前的校对规则
可以通过 SHOW VARIABLES LIKE ‘collation%‘; 命令查看当前 MySQL 使用的校对规则,命令和运行结果如下所示:
mysql> SHOW VARIABLES LIKE ‘collation%‘; +----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8mb4_unicode_ci | | collation_database | utf8mb4_unicode_ci | | collation_server | utf8mb4_unicode_ci | +----------------------+--------------------+ 3 rows in set (0.00 sec)
上述运行结果含义如下表所示:
名称 说明 collation_connection 连接数据库时使用的校对规则 collation_database 创建数据库时使用的校对规则 collation_server MySQL 服务器使用的校对规则其中, ci 表示大小写不敏感, cs 表示大小写敏感, bin 表示按照二进制编码值比较。
4 MySQL 字符集的转换过程
MySQL 中字符集的转换过程如下:
在终端执行 MySQL 命令或者 SQL 语句时,这些命令或语句从 终端字符集 转换为 character_set_client 定义的字符集。 使用终端成功连接 MySQL 服务器之后,就建立了一条 数据通信链路 , MySQL 命令或者 SQL 语句沿着数据通信链路传向 MySQL 服务器,由 characer_set_client 定义的字符集转换为 character_set_connection 定义的字符集。 MySQL 服务实例接收到数据通信链路中的 MySQL 命令或者 SQL 语句之后,将 MySQL 命令或者 SQL 语句从 character_set_connection 定义的字符集转换为 character_set_server 定义的字符集。 如果 MySQL 命令或者 SQL 语句针对于某个数据库进行操作,此时将 MySQL 命令或者 SQL 语句从 chatacter_set_server 定义的字符集转换为 character_set_database 定义的字符集。 MySQL 命令或者 SQL 语句执行结束之后,将执行结果设置为 character_set_results 定义的字符集。 执行结果沿着数据通信链路返回,将执行结果从 character_set_results 定义的字符集转换为 character_set_client 定义的字符集,最终转换为终端字符集,显示到终端窗口中。
🙈 MySQL-05-字符集和校对规则
标签:特殊 toc nic info 服务 字符 utf8mb4 运行 方案
查看更多关于🙈 MySQL-05-字符集和校对规则的详细内容...