本文为小异常原创文章,非商用自由转载。请保持署名和注明出处,谢谢!

本文网址: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`。