MySQL字符集和校对规则详解

caocao1年前教程198

在线wifi跑包 金刚包跑包 cap跑包 hccapx ewsa在线 就来 曹操wifi

各位好 又见面了 我是曹操 今天给大家带来一篇新的教程

希望各位细心学习 低调用网

mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | gbk                                                     |
| character_set_connection | gbk                                                     |
| character_set_database   | latin1                                                  |
| character_set_filesystem | binary                                                  |
| character_set_results    | gbk                                                     |
| character_set_server     | latin1                                                  |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set, 1 warning (0.01 sec)

在讲解字符集和校对规则之前,我们先来简单了解一下字符、字符集和字符编码。字符(Character)是计算机中字母、数字、符号的统称,一个字符可以是一个中文汉字、一个英文字母、一个阿拉伯数字、一个标点符号等。计算机是以二进制的形式来存储数据的。平时我们在显示器上看到的数字、英文、标点符号、汉字等字符都是二进制数转换之后的结果。

字符集(Character set)定义了字符和二进制的对应关系,为字符分配了唯一的编号。常见的字符集有 ASCII、GBK、IOS-8859-1等。

字符编码(Character encoding)也可以称为字集码,规定了如何将字符的编号存储到计算机中。大部分字符集都只对应一种字符编码,例如:ASCII、IOS-8859-1、GB2312、GBK,都是既表示了字符集又表示了对应的字符编码。所以一般情况下,可以将两者视为同义词。Unicode字符集除外,Unicode有三种编码方案,即UTF-8、UTF-16和UTF-32。最为常用的是UTF-8编码。

校对规则(Collation)也可以称为排序规则,是指在同一个字符集内字符之间的比较规则。字符集和校对规则是一对多的关系,每个字符集都有一个默认的校对规则。字符集和校对规则相辅相成,相互依赖关联。

简单来说,字符集用来定义MySQL存储字符串的方式,校对规则用来定义MySQL比较字符串的方式。

想了解ASCII、GB2312、GBK、Unicode字符集的小伙伴,可点击以下链接阅读学习:

mysql> SHOW VARIABLES LIKE 'collation\_%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | gbk_chinese_ci    |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set, 1 warning (0.01 sec)

上述运行结果说明如下表所示:

名称 说明 charactersetclient MySQL客户端使用的字符集 charactersetconnection 连接数据库时使用的字符集 charactersetdatabase 创建数据库使用的字符集 charactersetfilesystem MySQL服务器文件系统使用的字符集,默认值为binary,不做任何转换 charactersetresults 数据库给客户端返回数据时使用的字符集 charactersetserver MySQL服务器使用的字符集,建议由系统自己管理,不要人为定义 charactersetsystem 数据库系统使用的字符集,默认值为utf8,不需要设置 charactersetsdir 字符集的安装目录

乱码时,不需要关心charactersetfilesystem、charactersetsystem和charactersetsdir这3个系统变量,它们不会影响乱码。

可以通过SHOW VARIABLES LIKE 'character%';命令查看当前MySQL使用的字符集,命令和运行结果如下:

对上述运行结果说明如下:

校对规则命令约定如下:MySQL字符集的转换过程MySQL中字符集的转换过程如下:

1)在命令提示符窗口(cmd命令行)中执行MySQL命令或sql语句时,这些命令或语句从“命令提示符窗口字符集”转换为“charactersetclient”定义的字符集。

2)使用命令提示符窗口成功连接MySQL服务器后,就建立了一条“数据通信链路”,MySQL命令或sql语句沿着“数据链路”传向MySQL服务器,由charactersetclient定义的字符集转换为charactersetconnection定义的字符集。

3)MySQL服务实例收到数据通信链路中的MySQL命令或sql语句后,将MySQL命令或sql语句从charactersetconnection定义的字符集转换为charactersetserver定义的字符集。

4)若MySQL命令或sql语句针对于某个数据库进行操作,此时将MySQL命令或sql语句从charactersetserver定义的字符集转换为charactersetdatabase定义的字符集。

5)MySQL命令或sql语句执行结束后,将执行结果设置为charactersetresults定义的字符集。

6)执行结果沿着打开的数据通信链路原路返回,将执行结果从charactersetresults定义的字符集转换为charactersetclient定义的字符集,最终转换为命令提示符窗口字符集,显示到命令提示符窗口中。

相关文章

给路由器安装网盘工具Alist

给路由器安装网盘工具Alist

安装和使用alist网盘工具的方法 在之前的文章中,我们已经介绍了如何安装和使用alist网盘工具。这篇文章得到了广大粉丝的支持。然而,alist是安装在本地服务器上的,而本地服务器并不能保证24*7...

MSF和永恒之蓝&渗透安卓手机

MSF和永恒之蓝&渗透安卓手机

在线wifi跑包 金刚包跑包 cap跑包 hccapx ewsa在线 就来 曹操wifi 各位好 又见面了 我是曹操 今天给大家带来一篇新的教程 希望各位细心学习 低调用网 Metasploit简介...

如何破解128位密码?

在线wifi跑包 金刚包跑包 cap跑包 hccapx ewsa在线 就来 曹操wifi 各位好 又见面了 我是曹操 今天给大家带来一篇新的教程 希望各位细心学习 低调用网 使用可逆加密存储的密码,...

kali(基于debian)安装教程

kali(基于debian)安装教程

在线wifi跑包 金刚包跑包 cap跑包 hccapx ewsa在线 就来 曹操wifi 各位好 又见面了 我是曹操 今天给大家带来一篇新的教程 希望各位细心学习 低调用网 回答1:Kali Lin...