mysql字符集

365 阅读2分钟

1.字符集指的是某个字符范围的编码规则
2.字符集的常见种类:ASCII,latin1,GB2312,GBK,Unicode(utf8,utf16,utf32)
3.比较规则是针对某种字符集里面字符大小比较的一种规则
一般比较规则的名称以字符集开头,中间紧跟着该比较规则用于哪种语言,后缀表示是否区分重音、大小写,例如utf8_general_ci表示utf8字符集的通用的不区分大小写的比较规则

后缀英文描述
_aiaccent insensitive不区分重音
_asaccent sensitive区分重音
_cicase insensitive不区分大小写
_cscase sensitive区分大小写
_binbinary以二进制比较

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.比较规则一般用于字符串比较大小和对列进行排序