MySql字符集

2019-03-19  本文已影响0人  春苟哈皮

字符集

计算机存储的是二进制数据,所以就需要建立一种规则表示二进制数据和字符之间的映射关系。这种规则就叫做字符集

比较规则

比较规则是建立在字符集的基础上的,用来比较两个字符的大小。

常用字符集

ASCII码

共128个字符,包括空格、标点符号、数字、大小写字母和一些看不到的字符。

使用一个字节进行编码。例:

'M' -> 0100 1101 (十六进制:0x4D,十进制:77)

'S' -> 0101 0011 (十六进制:0x53,十进制:83)

ISO 8859-1

共256字符,在ASCII基础上扩充了128个西欧常用字符。别名latin1

使用一个字符编码。

GB2312

收录了多种语言字体,其中包括汉字6763个。同时兼容了ASCII,所以在编码格式上有点奇怪。

GBK

GB2312的扩充,编码方式兼容GB2312

UTF8

收录了地球上所有已知的字符,还在不断扩充。

兼容ASCII,采用变长编码方式,每个字符使用1-4个字节。

MySql中的UTF8

因为utf8包含了太多内容,常用的字符使用1-3个字符就足够表示了。而且MySql中字符集表示一个字符所用最大字节长度在某些方面会影响系统的存储和性能,所以MySqlutf8定义了两个概念:

MySql中的字符集转换

从客户端发送往服务器的请求本质就是一个字符串,服务器响应也是传递一个字符串。而字符串又是某种字符集的编码格式。所以在这个传输的过程中,就会出现多次字符集的转换,对mysql而言,这个过程会用到三个系统变量设置的字符集。

常量 描述
character_set_client 服务器解码请求时使用的字符集
character_set_connection 服务器运行过程中使用的字符集
character_set_results 服务器向客户端返回数据时使用的字符集

请求从发送到结果返回的字符集变化

  1. 客户端发送请求

    客户端采用的字符集与操作系统的字符集保持一致。

  2. 服务器接受客户端请求

    服务器会把接收到的请求认为是character_set_client字符集,把请求字符串按照该规则转码,对转码后的结果进行操作。

  3. 服务端返回操作结果给客户端

    服务器将把得到的结果集使用character_set_results编码后发送给客户端。

可以在配置文件里写

[client]
default-character-set=utf8

这样可以做到在启动客户端的时候将上面这三个常量都设置成UTF8

MySql的比较规则

命名规律

MySql字符集和比较规则的四种级别

查看MySql字符集

show variables like 'collation_%';
show variables like 'char%';

上一篇 下一篇

猜你喜欢

热点阅读