MySQL字符集和校对规则详解

caocao2年前教程272

在线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定义的字符集,最终转换为命令提示符窗口字符集,显示到命令提示符窗口中。

相关文章

基于aircrack-ng跑无线信号WIFI的握手包密码

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

找单词神器,畅玩跑字典。

找单词神器,畅玩跑字典。

在线wifi跑包 金刚包跑包 cap跑包 hccapx ewsa在线 就来 曹操wifi 各位好 又见面了 我是曹操 今天给大家带来一篇新的教程 希望各位细心学习 低调用网 找单词神器,畅玩跑字典,...

kali&BT5下利用nmap对mysql等数据库渗透与爆破

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

MurmurHash 哈希算法

MurmurHash 哈希算法

在线wifi跑包 金刚包跑包 cap跑包 hccapx ewsa在线 就来 曹操wifi 各位好 又见面了 我是曹操 今天给大家带来一篇新的教程 希望各位细心学习 低调用网 简单(根据生成的汇编指令...