Mysql编码问题

编码和比较规则

  • character_set_client 服务器解码请求时使用的字符集

  • character_set_connection 服务器处理请求时会把请求字符串从character_set_client转为character_set_connection

  • character_set_results 服务器向客户端返回数据时使用的字符集

一般情况下要使用保持这三个变量的值和客户端使用的字符集相同。

设置字符集一致,方法一:

SET character_set_client = 字符集名; 

SET character_set_connection = 字符集名;

SET character_set_results = 字符集名; 

方法二:

SET NAMES 字符集名;

另外,如果你想在启动客户端的时候就把character_set_clientcharacter_set_connectioncharacter_set_results这三个系统变量的值设置成一样的,那我们可以在启动客户端的时候指定一个叫default-character-set的启动选项,比如在配置文件里可以这么写:

[client]
default-character-set=utf8

编码过程

image.png
  • 客户端使用操作系统的字符集编码请求字符串,向服务器发送的是经过编码的一个字节串。

  • 服务器将客户端发送来的字节串采用character_set_client代表的字符集进行解码,将解码后的字符串再按照character_set_connection代表的字符集进行编码。

  • 如果character_set_connection代表的字符集和具体操作的列使用的字符集一致,则直接进行相应操作,否则的话需要将请求中的字符串从character_set_connection代表的字符集转换为具体操作的列使用的字符集之后再进行操作。

  • 将从某个列获取到的字节串从该列使用的字符集转换为character_set_results代表的字符集后发送到客户端。

  • 客户端使用操作系统的字符集解析收到的结果集字节串。

你可能感兴趣的:(Mysql编码问题)