首先回答题目,可以直接在MySQL黑框里面设置输入SET NAMES GBK;
1.1 客户端和服务端通信中的字符集
- 出现乱码,多半是因为编码字符集和解码字符集不一致导致的。
1.2 MySQL服务器中字符集的转换
系统变量 | 描述 |
---|---|
character_set_client | 服务器解码请求时使用的字符集 |
character_set_connection | 服务器处理请求时会把请求字符串从 character_set_client 转为 character_set_connection |
character_set_results | 服务器向客户端返回数据时使用的字符集 |
- 客户端发送请求使用的字符集
- 类 Unix 系统使用的是 utf8
- Windows 使用的是 gbk
- 服务器解码,服务器认为客户端发送过来的请求是用 character_set_client 编码的。
服务器收到一串二进制的字节,然后根据character_set_client解码,然后服务器处理请求时会把请求字符串从 character_set_client 转为 character_set_connection - 将character_set_connection解码后的数据保存到数据库
- 将数据以character_set_results编码的形式返回给客户端
- 通常都把 character_set_client 、character_set_connection、character_set_results 这三个系统变量设置成和客户端使用的字符集一致的情况,这样减少了很多无谓的字符集转换。
将字符集都设置为一样的,可以使用下面的语句:
SET NAMES 字符集名;这一条语句产生的效果和我们执行这3条的效果是一样的:
SET character_set_client = 字符集名;
SET character_set_connection = 字符集名;
SET character_set_results = 字符集名;
- 也可以再客户端启动的时候设置,如配置文件在[client]组中添加
default-character-set=utf8
,也会将三个系统变量的值设置成 utf8 。