客户端连接 的字符集和字符序
"连接"是指客户端程序连接到服务器时建立的会话,以开始与服务器的交互。客户端通过会话连接发送 SQL 语句(例如查询)。服务器通过连接将响应(例如结果集或错误消息)发送回客户端。
字符集和字符序的系统变量
以下字符集和字符序的系统变量和客户端与服务器的交互有关:
-
character_set_server和collation_server系统变量指定服务器的字符集和字符序。 -
character_set_database和collation_database系统变量指定数据库的默认字符集和字符序。
此外,服务器还会使用以下系统变量:
-
character_set_client系统变量用于设置客户端发送语句的字符集。 -
character_set_connection系统变量用于设置收到语句后应转换的字符集。服务器将客户端发送的语句从character_set_client转换为character_set_connection。 -
collation_connection系统变量用于设置连接使用的字符集和字符序。collation_connection对于字符串的比较很重要。 -
character_set_results系统变量用于设置服务器向客户端返回查询结果的字符集,包括数据结果(例如列值)、元数据(例如列名称)和错误消息。如果不需要不执行结果集或错误消息的转换,请将character_set_results设置 为NULL或二进制,语法如下:SET character_set_results = NULL;
SET character_set_results = binary;
以下语句可以查看所有字符集和字符序的系统变量:
SHOW SESSION VARIABLES LIKE 'character\_set\_%';
+--------------------------+---------+
| Variable_name | Value |
+--------------------------+---------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb4 |
+--------------------------+---------+
7 rows in set (0.009 sec)
SHOW SESSION VARIABLES LIKE 'collation\_%';
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | utf8mb4_general_ci |
| collation_server | utf8mb4_general_ci |
+----------------------+--------------------+
3 rows in set (0.002 sec)
配置客户端字符集的 SQL 语句
建立连接后,客户端可以更改当前会话的字符集和字符序的系统变量。可以使用如下 SET 语句更改这些变量:
-
SET NAMES 'charset_name'语句。用来设定客户端会在之后的请求中使用的字符集。等效于以下三个语句:
SET character_set_client = charset_name;
SET character_set_results = charset_name;
SET character_set_connection = charset_name;要指定用于
collation_connection的字符序,请添加COLLATE子句:SET NAMES 'charset_name' COLLATE 'collation_name' -
SET CHARACTER SET 'charset_name'语句。类似于
SET NAMES,但其将character_set_connection和collation_connection设置为character_set_database和collation_database,即默认数据库的字符集和字符序。等效于以下三个语句:SET character_set_client = charset_name;
SET character_set_results = charset_name;
SET collation_connection = @@collation_database;