执行下面的命令:
mysql> set names charset_name;
相当于执行了下面三条命令语句:
mysql> SET character_set_client = charset_name;
mysql> SET character_set_results = charset_name;
mysql> SET character_set_connection = charset_name;
所以 set names
是设置上面三个内置系统变量的快捷键命令。
官方文档的解释:
1.character_set_client
是指客户端发送过来的语句的编码; 2.character_set_connection
是指 mysqld 收到客户端的语句后,要转换到的编码; 3.character_set_results
是指 server 执行语句后,返回给客户端的数据的编码。
对人来说,能够理解的是各种各样的符号,而对计算机来说,只能理解二进制,二进制和符号之间的对应关系就是编码。不同地域国家都有自己的一套符号集合,每套符号集合都各自用一组二进制数字表示,从而形成了不同的编码方案,字符集其实就是二进制编码和符号的对应关系集合。
同一个二进制数在不同的字符集下可能对应不一样的字符,如在 GBK
字符集中,0xC4E3
对应的是“你”,而在 big5
字符集中对应的是“斕”,而“你”在 unicode
中的编码是 0x4F60
,在 Collation-Charts 这个网站有字符集和编码对应关系图,可以非常直观地看到不同编码下二进制数和符号的对应关系。
set names
设置的三个系统变量就是设置 mysqld 和客户端通信时,mysqld 应该如何解码 client 发来的字符,以及如何编码返回给客户端的结果。
字符在 MySQL 中的编码转换流程如下: