MySQL 8个character_set变量的基本作用

使用下列命令SHOW VARIABLES LIKE '%char%';可以查看 MySQL中8个 character_set 变量:

mysql> show variables like 'char%';
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | utf8                                                    |
| character_set_connection | utf8                                                    |
| character_set_database   | gbk                                                     |
| character_set_filesystem | binary                                                  |
| character_set_results    | utf8                                                    |
| character_set_server     | utf8mb4                                                 |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 8.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+

character_set_client
主要用来设置客户端使用的字符集。

character_set_connection
主要用来设置连接数据库时的字符集,如果程序中没有指明连接数据库使用的字符集类型则按照这个字符集设置。

character_set_database
主要用来设置默认创建数据库的编码格式,如果在创建数据库时没有设置编码格式,就按照这个格式设置。

character_set_filesystem
文件系统的编码格式,把操作系统上的文件名转化成此字符集,即把 character_set_client转换character_set_filesystem, 默认binary是不做任何转换的。

character_set_results
数据库给客户端返回时使用的编码格式,如果没有指明,使用服务器默认的编码格式。

character_set_server
服务器安装时指定的默认编码格式,这个变量建议由系统自己管理,不要人为定义。

character_set_system
数据库系统使用的编码格式,这个值一直是utf8,不需要设置,它是为存储系统元数据的编码格式。

character_sets_dir
这个变量是字符集安装的目录。

在启动mysql后,我们只关注下列变量是否符合我们的要求:
character_set_client
character_set_connection
character_set_database
character_set_results
character_set_server

下列三个系统变量我们不需要关心,不会影响乱码等问题。
character_set_filesystem
character_set_system
character_sets_dir

更改以上字符集直接 set character_set_XXX = “gbk”;(XXX是写以上的变量名)

借助网上的一个完整的用户请求的字符集转换流程来更好的理解上述几个变量:

mysql Server收到请求时将请求数据从 character_set_client 转换为 character_set_connection,进行内部操作前将请求数据从 character_set_connection 转换为内部操作字符集,步骤如下
使用每个数据字段的 CHARACTER SET 设定值;
若上述值不存在,则使用对应数据表的字符集设定值
若上述值不存在,则使用对应数据库的字符集设定值;
若上述值不存在,则使用 character_set_server 设定值。
最后将操作结果从内部操作字符集转换为 character_set_results

示意图如下:
在这里插入图片描述

<think>我们正在处理用户的问题:如何将MySQL的`character_set_results`设置为默认值? 用户引用了三段内容,但主要与字符集设置和查询有关。其中引用[1]提到了修改my.ini配置文件来设置字符集为gbk,引用[2]提到了通过ODBC配置字符集,引用[3]则是一些SQL查询示例,与当前问题关系不大。 用户明确的问题是:如何将`character_set_results`设置为默认值? 我们需要理解`character_set_results`是什么: 在MySQL中,`character_set_results`是系统变量,用于设置服务器返回查询结果给客户端所使用的字符集。通常,它与连接字符集相关。 设置默认值的方法: 1. 临时设置(仅对当前会话有效): 使用SQL语句:`SET character_set_results = default;` 这里的`default`将会把该变量设置为系统默认的字符集。默认值通常由服务器配置决定,比如在配置文件中设置的字符集。 2. 永久设置(对所有新连接有效): 需要修改MySQL配置文件(my.ini或my.cnf),在相应的段(如[client]、[mysql]或[mysqld])中设置。 例如,在[mysql]段中添加: default-character-set = utf8mb4 # 或者你想要的默认字符集 或者在[mysqld]段中设置: character_set_server = utf8mb4 # 这会影响到多个系统变量,包括character_set_results的默认值 注意:在MySQL 5.5及以上版本中,推荐使用utf8mb4作为默认字符集。 3. 在连接字符串中设置(对于应用程序): 在连接数据库时,可以指定字符集,例如: jdbc:mysql://localhost:3306/db?characterEncoding=utf8 4. 通过SET NAMES命令统一设置连接字符集: `SET NAMES 'charset_name'` 命令会同时设置character_set_client, character_set_connection, character_set_results三个变量。 例如:`SET NAMES 'utf8mb4';` 这会将character_set_results也设置为utf8mb4。 但是,用户想要设置为“默认值”,那么这个默认值是在MySQL服务器启动时确定的,通常由以下因素决定: - 编译MySQL时指定的默认字符集 - 配置文件中的配置(在[mysqld]段中设置character_set_server) 因此,若想将character_set_results的默认值设置为某个特定的字符集,需要在配置文件中设置服务器的默认字符集。 具体步骤: 1. 找到MySQL的配置文件my.ini(Windows)或my.cnf(Linux)。 2. 在[mysqld]段中设置: character_set_server = utf8mb4 # 这里用utf8mb4举例,也可以是其他字符集如latin1、gbk等 3. 重启MySQL服务。 这样,新建立的连接的character_set_results默认值就会是utf8mb4(因为character_set_server的默认值会影响到character_set_results的默认值)。 另外,如果用户想要每次连接时都自动设置character_set_results,可以在配置文件的[client]或[mysql]段设置: default-character-set = utf8mb4 注意:在[client]段设置会影响所有客户端,在[mysql]段设置则只影响mysql命令行客户端。 所以,总结两种方法: 方法一(永久改变默认值): 修改配置文件,在[mysqld]段设置character_set_server,并重启MySQL服务。 方法二(每次连接时自动设置): 在配置文件的[client]段(或[mysql]段)设置default-character-set,这样每次连接时都会自动执行SET NAMES,从而设置character_set_results。 用户可以根据需要选择。 注意:引用[1]中提到了修改配置文件并重启服务,与我们的方法一致。 因此,回答如下: </think>### 如何将MySQL的`character_set_results`设置为默认值 MySQL的`character_set_results`变量决定了服务器返回查询结果时使用的字符集。将其设置为默认值的方法如下: #### 1. **临时设置(仅当前会话有效)** 使用SQL命令直接重置为全局默认值: ```sql SET character_set_results = DEFAULT; ``` 执行后,该会话将使用全局配置文件中定义的默认字符集返回结果。 #### 2. **永久设置(修改配置文件)** - **步骤**: 1. 停止MySQL服务 2. 编辑MySQL配置文件 `my.ini` (Windows) 或 `my.cnf` (Linux) 3. 在 `[mysqld]` 或 `[client]` 段添加字符集配置: ```ini [mysqld] character_set_server = utf8mb4 # 默认字符集(推荐utf8mb4) [client] default-character-set = utf8mb4 ``` 4. 重启MySQL服务 - **效果**: 重启后所有新连接的 `character_set_results` 将继承 `character_set_server` 的值[^1][^2]。 #### 3. **连接时指定字符集** 在应用程序连接字符串中显式声明: ```python # Python示例 conn = pymysql.connect( host='localhost', charset='utf8mb4', # 强制结果集使用utf8mb4 init_command='SET character_set_results=DEFAULT' ) ``` ### 验证设置 执行命令检查当前值: ```sql SHOW VARIABLES LIKE 'character_set_results'; ``` 若返回值为 `utf8mb4` (或其他配置的默认值),则设置成功。 > **注意**: > - 修改配置文件需重启服务生效,适合长期使用[^1]。 > - 临时设置适合快速测试,但重启后失效。 > - 字符集需与表编码一致(如 `utf8mb4`),避免乱码[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值