码迷,mamicode.com
首页 > 数据库 > 详细

🙈 MySQL-05-字符集和校对规则

时间:2021-03-15 10:51:57      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:特殊   toc   nic   info   服务   字符   utf8mb4   运行   方案   

?? MySQL-05-字符集和校对规则

技术图片

1 开篇介绍

?? Hello 大家好,我是 NagaseMySQL 从删库到跑路 ,又到了学习 MySQL 的时刻,接下来就让我们感受一下 MySQL 独特的魅力吧。

在该篇博客中,我们主要介绍 字符集与校对规则 相关的内容,祝你学的开心 ?? 。

2 相关概念

2.1 字符

字符(Character) 是计算机中字母、数字、符号的统称,一个字符可以是一个中文汉字、一个英文字母、一个阿拉伯数字、一个标点符号等。

计算机是以二进制的形式来存储数据的。平时我们在显示器上看到的数字、英文、标点符号、汉字等字符都是二进制数转换之后的结果。

2.2 字符集

字符集(Character set) 定义了 字符二进制 的对应关系,为字符分配了唯一的编号。

常见的字符集: ASCIIGBKISO-8859-1 等。

2.3 字符编码

字符编码(Character encoding)也可以称为字集码,规定了如何将字符的编号存储到计算机中,是一种规则。

大部分 字符集 都只对应一种 字符编码 ,例如:ASCIIIOS-8859-1GB2312GBK,都是既表示了字符集又表示了对应的字符编码。所以 一般情况 下,可以将两者 视为同义词

However,Unicode 字符集除外,Unicode 有三种编码方案,即 UTF-8UTF-16UTF-32

最为常用的是 UTF-8 编码。

2.4 字符集与字符编码的关系

字符集字符编码 这两个概念常常会被混淆,但实际上,这两者是有区别的。

字符集 与 字符编码 是两个不同层面的概念:

  • charsetcharacter set 的简写,即:字符集。
  • encodingcharset 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 中字符集的转换过程如下:

  1. 在终端执行 MySQL 命令或者 SQL 语句时,这些命令或语句从 终端字符集 转换为 character_set_client 定义的字符集。
  2. 使用终端成功连接 MySQL 服务器之后,就建立了一条 数据通信链路MySQL 命令或者 SQL 语句沿着数据通信链路传向 MySQL 服务器,由 characer_set_client 定义的字符集转换为 character_set_connection 定义的字符集。
  3. MySQL 服务实例接收到数据通信链路中的 MySQL 命令或者 SQL 语句之后,将 MySQL 命令或者 SQL 语句从 character_set_connection 定义的字符集转换为 character_set_server 定义的字符集。
  4. 如果 MySQL 命令或者 SQL 语句针对于某个数据库进行操作,此时将 MySQL 命令或者 SQL 语句从 chatacter_set_server 定义的字符集转换为 character_set_database 定义的字符集。
  5. MySQL 命令或者 SQL 语句执行结束之后,将执行结果设置为 character_set_results 定义的字符集。
  6. 执行结果沿着数据通信链路返回,将执行结果从 character_set_results 定义的字符集转换为 character_set_client 定义的字符集,最终转换为终端字符集,显示到终端窗口中。

技术图片

🙈 MySQL-05-字符集和校对规则

标签:特殊   toc   nic   info   服务   字符   utf8mb4   运行   方案   

原文地址:https://www.cnblogs.com/apple-liumingyang/p/14526864.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!