> For the complete documentation index, see [llms.txt](https://beret81.gitbook.io/study-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://beret81.gitbook.io/study-notes/mysql-shu-ju-ku/zi-fu-ji.md).

# 字符集

## **字符编码概念**

字符(Character)是各种文字和符号的总称，包括各国家文字、标点符号、图形符号、数字等。

在计算机中所看到的任何内容都是字符构成的。

字符编码（character code）是计算机针对各种符号，在计算机中的一种二进制存储代号。

## **字符集概念**

字符集(Character set)是多个字符的集合，字符集种类较多，每个字符集包含的字符个数不同。

常见字符集名称：ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字，需要进行字符编码，以便计算机能够识别和存储各种文字。中文文字数目大，而且还分为简体中文和繁体中文两种不同书写规则的文字，而计算机最初是按英语单字节字符设计的，因此，对中文字符进行编码，是中文信息交流的技术基础。

## **设置客户端所有字符集**

快捷方式：set names 字符集

深层原理：客户端，服务端，连接层（show variables like ‘character*set*%’）

Mysql.exe与Mysqld.exe之间的处理关系一共分为三层

客户端传入数据给服务端：client:character\_set\_client

服务端返回数据给客户端：server:character\_set\_results

客户端与服务端之间的连接：connection:character\_set\_connection

Set names 字符集的本质：就是一次性打通三层关系的字符集，变得一致。

在系统中有三个变量来记录着这三个关系对应的字符集：show variables like ‘character*set*%’;

```
mysql> show variables like 'character_set%';
+--------------------------+----------------------------------------------+
| Variable_name            | Value                                        |
+--------------------------+----------------------------------------------+
| character_set_client     | utf8mb4                                      |
| character_set_connection | utf8mb4                                      |
| character_set_database   | utf8mb4                                      |
| character_set_filesystem | binary                                       |
| character_set_results    | utf8mb4                                      |
| character_set_server     | utf8mb4                                      |
| character_set_system     | utf8                                         |
| character_sets_dir       | C:\mysql\mysql-8.0.22-winx64\share\charsets\ |
+--------------------------+----------------------------------------------+
8 rows in set, 1 warning (0.06 sec)
```

修改服务器端变量的值

Set 变量名 = 值;

```
mysql> set character_set_client = gbk;
Query OK, 0 rows affected (0.03 sec)

mysql> show variables like 'character_set%';
+--------------------------+----------------------------------------------+
| Variable_name            | Value                                        |
+--------------------------+----------------------------------------------+
| character_set_client     | gbk                                          |
| character_set_connection | utf8mb4                                      |
| character_set_database   | utf8mb4                                      |
| character_set_filesystem | binary                                       |
| character_set_results    | utf8mb4                                      |
| character_set_server     | utf8mb4                                      |
| character_set_system     | utf8                                         |
| character_sets_dir       | C:\mysql\mysql-8.0.22-winx64\share\charsets\ |
+--------------------------+----------------------------------------------+
8 rows in set, 1 warning (0.03 sec)
```

Connection只是为了更方便客户端与服务端进行字符集转换而设。

Set names gbk;

Set character\_set\_client = gbk; //为了让服务器识别客户端传来的数据

Set character\_set\_connection = gbk;//更好的帮助客户端与服务端之间进行字符集转换

Set character\_set\_results = gbk;//为了告诉客户端服务端所有的返回的数据字符集
