不多说,先上结果
一般我们要创建一个Database,都是直接执行create database xxxx;
,执行SQL语句show variables like "character%";
会出现以下结果:
character_set_client | gbk
character_set_connection| gbk
character_set_results | gbk
执行set names utf8之后,变为:
character_set_client | utf8
character_set_connection| utf8
character_set_results | utf8
解释
set names <charset>
其实有两个作用:
- 告诉mysql server,客户端(P程序)提交给它的编码是什么
- 告诉mysql server,客户端需要的结果的编码是什么
也就是说,如果数据表使用gbk字符集,而后端Java或者PHP程序使用UTF-8编码,我们在执行查询前运行set names utf8
,告诉mysql server正确编码即可,无须在程序中编码转换。这样我们以utf-8编码提交查询到mysql server,得到的结果也会是utf-8编码,省却了程序中的转换编码问题。
扩展与疑问?
一条set names utf8;
是不是就已经等于set character_set_client=utf8;
+ set character_set_connection=utf8;
+ set character_set_results=utf8;
这三条呢?