MySQL关于character有如下8个变量:

1. character_set_client

2. character_set_connection

3. character_set_database

4. character_set_filesystem

5. character_set_results

6. character_set_server

7. character_sets_dir

8. system_charset_info

结论:

- character_set_client、character_set_connection、character_set_results这3个参数值是由客户端每次连接进来设置的,和服务器端没关系。

- 我们登陆进mysql后,执行 set names utf8; 实际就是同时修改上面的这3个参数值的。

环境:

- CentOS6.7x86_64

- Percona Server 5.7 (server段设置的是character-set-server= utf8)

在Windows上使用CMD命令行去连接node1,如下图:

```

mysql -uroot -h 192.168.2.11 -pAbcd@1234 --default-character-set=latin1

```

在Windows上使用SQLyog命令行去连接node1,如下图:

```

mysql -uroot -h 192.168.2.11 -pAbcd@1234 --default-character-set=latin1

```

可以看到2个工具连接到同一个服务器上,显示出的参数却不一样的。从官方文档中可以看出character_set_connection、character_set_client、character_set_results三个字符集什么时候用到。从实际上可以看到,当客户端连接服务器的时候,它会将自己想要的字符集名称发给mysql服务器,然后服务器就会使用这个字符集去设置character_set_client、character_set_connection、character_set_results这三个值。如cmd是用gbk,而SQLyog是用utf8.如果我们想告诉mysql server自己本次连接想使用latin1,则命令行下可以如下写法:

```

mysql -uroot -h 192.168.2.11 -pAbcd@1234 --default-character-set=latin1

```

此外,要修改上面的3个字符集的话,还可以在my.cnf的[mysql]段里面增加:

默认字符集设置为latin1,可以通过登录后执行set names latin1命令来实现相同的效果。其他几个参数如下:

1. character_set_database:表示当前所在的数据库字符集。如果没有切换到其他数据库,那么character_set_database显示的和character_set_server一致。例如,当切换到一个默认为gbk的数据库时,执行showvariables like 'character_set_database';看到的就是gbk。

2. character_set_filesystem:用于将操作系统上的文件名转换为指定的字符集。例如,将character_set_client转换为character_set_filesystem。默认情况下,binary类型不做任何转换。

3. character_set_system:这是一个只读数据,不能更改。它表示元数据的编码,相信不会有人用中文做数据库名和字段名等操作。这个字段与具体存储的数据无关。

4. character_sets_dir:这个参数的作用不太清楚。