Mysql编码问题
2020-03-12 本文已影响0人
SingleException
编码和比较规则
-
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_client
、character_set_connection
、character_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
代表的字符集后发送到客户端。 -
客户端使用操作系统的字符集解析收到的结果集字节串。