1.字符集指的是某个字符范围的编码规则
2.字符集的常见种类:ASCII,latin1,GB2312,GBK,Unicode(utf8,utf16,utf32)
3.比较规则是针对某种字符集里面字符大小比较的一种规则
一般比较规则的名称以字符集开头,中间紧跟着该比较规则用于哪种语言,后缀表示是否区分重音、大小写,例如utf8_general_ci表示utf8字符集的通用的不区分大小写的比较规则
后缀 | 英文 | 描述 |
---|---|---|
_ai | accent insensitive | 不区分重音 |
_as | accent sensitive | 区分重音 |
_ci | case insensitive | 不区分大小写 |
_cs | case sensitive | 区分大小写 |
_bin | binary | 以二进制比较 |
4.在mysql中一个字符集有多个比较规则,有一个默认比较规则。每个比较规则必须对于一个字符集
5.mysql有四个级别的比较规则:服务器、数据库、表、字段
6.从客户端发送请求到服务器接收请求并返回结果过程中字符集的转换:
- (1)客户端使用操作系统的字符集编码请求字符串
- (2)服务器端使用character_set_client字符集解码,将解码后的字符集用character_set_connection进行编码
- (3)如果character_set_connection代表的字符集与列的字符集相同则直接进行操作,否则需要将character_set_connection字符集转换成列的字符集再进行操作
- (4)将结构转换成character_set_results字符集后发送到客户端
- (5)客户端用操作系统的字符集编码对结果进行解码
在这个过程中各个系统变量的含义如下:
系统变量 | 含义 |
---|---|
character_set_client | 操作系统用来解码从客户端发送过来的请求 |
character_set_connection | 操作系统将用character_set_client解析出来的字符串用character_set_connection编码 |
character_set_resultes | 操作系统用来将结果编码并发送到客户端 |
一般情况下要使用保持这三个变量的值和客户端使用的字符集相同
7.比较规则一般用于字符串比较大小和对列进行排序