本文为小异常原创文章,非商用自由转载。请保持署名和注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/79921734
本篇将简要介绍MySQL中关于8个character_set变量的基本作用。您可以使用以下SQL语句查看MySQL中的8个character_set变量:
```sql
SHOW VARIABLES LIKE '%char%';
```
以下是8个character_set变量的简介:
1. character_set_client:主要用来设置客户端使用的字符集。
2. character_set_connection:主要用来设置连接数据库时的字符集,如果程序中没有指明连接数据库使用的字符集类型,则按照这个字符集设置。
3. character_set_database:主要用来设置默认创建数据库的编码格式,如果在创建数据库时没有设置编码格式,就按照这个格式设置。
4. character_set_filesystem:文件系统的编码格式,用于将操作系统上的文件名转换成此字符集。即将 character_set_client 转换为 character_set_filesystem,默认情况下,binary 不做任何转换。
5. character_set_results:数据库给客户端返回时使用的编码格式,如果没有指明,则使用服务器默认的编码格式。
6. character_set_server:服务器安装时指定的默认编码格式,建议由系统自己管理,不要人为定义。
7. character_set_system:数据库系统使用的编码格式,此值始终为utf8,无需设置。它是存储系统元数据的编码格式。
8. character_sets_dir:此变量表示字符集安装的目录。
在启动MySQL后,我们需要关注以下几个变量以确保字符集设置正确:
1. character_set_client:客户端使用的字符集。
2. character_set_connection:连接时使用的字符集。
3. character_set_database:数据库的默认字符集。
4. character_set_results:结果集返回时的字符集。
5. character_set_server:服务器的默认字符集。
有三个系统变量我们不需要关心,它们不会影响乱码等问题:
1. character_set_filesystem:文件系统的字符集。
2. character_set_system:系统级别的字符集。
3. character_sets_dir:字符集目录的路径。
要更改这些字符集,可以直接使用`SET CHARACTER SET`语句,例如将`character_set_XXX`设置为`gbk`(XXX是上述变量名)。
为了更好地理解这些变量的作用,我们可以参考一个完整的用户请求的字符集转换流程:
1. MySQL Server收到请求时,首先将请求数据从`character_set_client`转换为`character_set_connection`。
2. 在进行内部操作之前,将请求数据从`character_set_connection`转换为内部操作字符集。这个过程包括以下步骤:
a. 使用每个数据字段的`CHARACTER SET`设定值;
b. 如果上述值不存在,则使用对应数据表的字符集设定值;
c. 如果上述值仍不存在,则使用对应数据库的字符集设定值;
d. 如果上述值仍然不存在,则使用`character_set_server`设定值。
3. 最后,将操作结果从内部操作字符集转换为`character_set_results`。