Linux下MySQL 5.5/5.6的修改字符集编码为UTF8(彻底解决中文乱码问题)

本文详细介绍了在CentOS7环境下,MySQL5.6版本出现乱码的具体解决方案。通过修改my.cnf配置文件中的字符集参数,并重启MySQL服务,成功将数据库的字符集从latin1改为utf8。

昨天在CentOS 7上遇到MySQL 5.6遇到乱码问题,特此总结一下: 一、登录MySQL,用SHOW VARIABLES LIKE ‘character%’;查看下字符集,显示如下:

+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

character_set_databasecharacter_set_server的默认字符集还是latin1

二、最简单的完美修改方法,修改mysqlmy.cnf文件中的字符集键值(注意配置的字段细节): 1、在[client]字段里加入default-character-set=utf8,如下:

[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8

2、在[mysqld]字段里加入character-set-server=utf8,如下:

[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
character-set-server=utf8

3、在[mysql]字段里加入default-character-set=utf8,如下:

[mysql]
no-auto-rehash
default-character-set=utf8

修改完成后,service mysql restart重启mysql服务就生效。注意:[mysqld]字段与[mysql]字段是有区别的。这点在网上没人反馈过。

使用SHOW VARIABLES LIKE ‘character%’;查看,发现数据库编码全已改成utf8

+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

输入图片说明

基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
<think> 我们正在解决如何永久将MySQL的客户端字符集(Client characterset)和连接字符集(Conn. characterset)从gbk改为utf8mb4。根据引用[1]和[3],我们可以通过修改MySQL配置文件来实现。 引用[1]提到,通过执行`set names utf8`可以临时修改,但重启后恢复。引用[3]给出了在Windows系统中修改my.ini文件的方法。 因此,我们需要: 1. 找到MySQL的配置文件(my.ini或my.cnf)。 2. 在配置文件的相应位置添加字符集设置。 3. 重启MySQL服务。 具体步骤: 对于Windows系统(参考引用[3]): - 打开my.ini文件(通常在MySQL安装目录下或C:\ProgramData\MySQL\MySQL Server X.X目录中)。 - 在[client]部分添加:default-character-set=utf8mb4 - 在[mysql]部分添加:default-character-set=utf8mb4 - 在[mysqld]部分添加:character-set-server=utf8mb4 和 collation-server=utf8mb4_unicode_ci (或者你想要的排序规则,如utf8mb4_general_ci) 注意:引用[3]中使用了utf8,但我们要的是utf8mb4,所以替换为utf8mb4。 对于Linux系统(通常是my.cnf文件): - 配置文件通常位于/etc/my.cnf 或 /etc/mysql/my.cnf 或 /usr/local/mysql/etc/my.cnf,也可能在MySQL数据目录下。 - 修改内容同上。 但是,引用[2]提到,Client characterset是客户端连接到MySQL时使用的字符集。我们在配置文件中设置[client]和[mysql]部分,就是为了让客户端在连接时使用utf8mb4。 修改后,重启MySQL服务,然后通过MySQL客户端连接,使用以下命令查看: SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%'; 特别注意: character_set_client、character_set_connection、character_set_results这三个变量应该变为utf8mb4。 然而,有时即使修改了配置文件,客户端连接时可能仍然显示为gbk。这可能是由于客户端本身有自己的配置。例如,如果使用mysql命令行客户端,它可能会根据操作系统的区域设置或者客户端自身的默认设置来决定字符集。因此,我们还需要确保客户端在连接时不强制使用gbk。 另外,如果客户端是应用程序(如PHP、Python等),则需要在连接字符串或连接选项中指定字符集。 因此,永久设置分为两部分: 1. 服务器配置:修改my.ini/my.cnf,设置[mysqld]部分的字符集,影响服务器默认的字符集和排序规则。 2. 客户端配置:在配置文件的[client]和[mysql]部分设置默认字符集,这样命令行客户端在连接时会使用utf8mb4。 但是,请注意:MySQL的[client]部分会影响所有使用MySQL客户端库的程序(包括命令行客户端和应用程序),但有些应用程序可能会在连接时显式设置字符集,这样会覆盖配置文件的设置。 所以,为了确保应用程序也使用utf8mb4,应在应用程序的连接字符串中指定字符集,例如: 在PHP中使用PDO:`new PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", ...);` 在Python中使用MySQLdb:`conn = MySQLdb.connect(..., charset='utf8mb4')` 总结步骤: 1. 修改MySQL配置文件: [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci # 或其他utf8mb4的排序规则 2. 重启MySQL服务。 3. 验证:登录mysql,执行: mysql> SHOW VARIABLES LIKE 'character_set_%'; mysql> SHOW VARIABLES LIKE 'collation%'; 4. 如果使用应用程序,确保在连接字符串中指定字符集utf8mb4。 注意:在MySQL 8.0中,默认已经是utf8mb4,但可能由于历史原因,配置文件中被设置成了gbk,所以我们修改配置文件覆盖默认设置。 另外,引用[4]提到设置gbk字符集,但我们是要设置utf8mb4,方法类似。 引用[3]中只设置了utf8,但我们要设置的是utf8mb4,所以替换即可。 但是,在配置文件中使用`default-character-set`在[client]和[mysql]部分,在MySQL 5.5之后可能不被支持(尤其在[mysqld]部分)。在[mysqld]部分,我们应该使用: character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci 而在[client]和[mysql]部分,使用`default-character-set=utf8mb4`仍然是有效的(至少在MySQL 5.65.7中有效)。但在MySQL 8.0中,[client]和[mysql]部分推荐使用: [client] default_character_set = utf8mb4 [mysql] default_character_set = utf8mb4 注意,MySQL 8.0的某些版本可能会忽略`default-character-set`,而使用`default_character_set`(下划线)。但通常两种写法都兼容。 为了避免问题,我们可以同时使用两种写法吗?不推荐,最好查看MySQL版本的文档。通常,使用下划线形式的配置项是更通用的。 因此,更通用的写法是使用下划线: [client] default_character_set = utf8mb4 [mysql] default_character_set = utf8mb4 [mysqld] character_set_server = utf8mb4 collation_server = utf8mb4_unicode_ci 这样,无论是MySQL 5.x还是8.x,都可以生效。 最后,修改配置文件后重启MySQL服务。 验证:登录后查看变量 character_set_client, character_set_connection, character_set_results 这三个变量应该都是utf8mb4。 如果通过命令行登录后,这三个变量仍然是gbk,则检查: - 配置文件修改的位置是否正确? - 配置文件是否被正确加载?(启动时是否指定了其他配置文件?) - 重启服务是否成功? 另外,在命令行登录时,也可以显式指定字符集:`mysql --default-character-set=utf8mb4 ...` 但是,我们的目标是不用每次登录都指定,所以修改配置文件是必要的。 因此,下面是详细步骤: ### 永久修改MySQL客户端和连接字符集UTF8MB4 #### 步骤1:定位MySQL配置文件 - **Windows**:`my.ini`(通常在MySQL安装目录或`C:\ProgramData\MySQL\MySQL Server X.X`) - **Linux**:`/etc/my.cnf` 或 `/etc/mysql/my.cnf` 或 `~/.my.cnf` #### 步骤2:修改配置文件 在文件中添加或修改以下部分(使用下划线形式的参数名,兼容性更强): ```ini [client] default_character_set = utf8mb4 [mysql] default_character_set = utf8mb4 [mysqld] character_set_server = utf8mb4 collation_server = utf8mb4_0900_ai_ci # 推荐MySQL 8.0使用的排序规则 # 或者使用通用规则:utf8mb4_unicode_ci ``` > 注意: > - 如果文件中已有这些部分,只需在其中添加或修改对应的配置项 > - 如果配置项已有但被注释,取消注释并修改 #### 步骤3:重启MySQL服务 - **Windows**:服务管理器重启或命令行执行 `net stop mysql` + `net start mysql` - **Linux**:`sudo systemctl restart mysql` 或 `sudo service mysql restart` #### 步骤4:验证配置 登录MySQL,执行: ```sql SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; ``` 预期输出: | Variable_name | Value | |--------------------------|--------------------| | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | collation_connection | utf8mb4_unicode_ci | # 或你设置的排序规则 | collation_server | utf8mb4_unicode_ci | #### 常见问题排查 1. **配置未生效**: - 检查配置文件路径是否正确(MySQL可能加载了其他配置文件) - 通过命令行查看加载的配置:`mysql --help | grep "Default options"` 2. **客户端工具覆盖设置**: - 某些GUI工具(如Navicat)需在连接属性中单独设置字符集 - 应用程序需在连接字符串中指定`charset=utf8mb4` #### 配置原理图解 ```mermaid graph LR A[客户端] -->|连接请求| B(MySQL服务) B --> C[读取配置文件] C --> D[设置连接字符集] D --> E[返回utf8mb4响应] ``` #### 相关引用 > “修改my.ini文件后重启服务即可永久生效字符集配置”[^3] > “Client characterset是客户端连接时使用的字符集编码”[^2] §§ 相关问题 §§ 1. 如何验证MySQL当前连接的字符集配置? 2. MySQL 8.0默认字符集5.7有何不同? 3. 修改字符集后出现乱码应如何排查? </think> ### 永久修改MySQL客户端字符集UTF8MB4的完整指南 #### 一、核心解决方案(配置文件修改) 在MySQL配置文件中添加以下设置即可永久生效: ```ini # 在 [client] 部分添加 [client] default-character-set = utf8mb4 # 在 [mysql] 部分添加 [mysql] default-character-set = utf8mb4 # 在 [mysqld] 部分添加 [mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_0900_ai_ci ``` #### 二、详细操作步骤 1. **定位配置文件** - Windows:`my.ini`(通常在MySQL安装目录或`C:\ProgramData\MySQL\MySQL Server 8.0`) - Linux:`/etc/my.cnf` 或 `/etc/mysql/my.cnf` 2. **修改配置文件** ```ini [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_0900_ai_ci ``` > 注意:MySQL 8.0+ 建议使用下划线语法 `default_character_set`(两种形式都兼容)[^3] 3. **重启MySQL服务** - Windows: ```cmd net stop mysql net start mysql ``` - Linux: ```bash sudo systemctl restart mysql ``` 4. **验证配置** ```sql SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; ``` 预期输出: | Variable_name | Value | |--------------------------|--------------------| | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | collation_connection | utf8mb4_0900_ai_ci | | collation_server | utf8mb4_0900_ai_ci | #### 三、连接过程字符集流向图解 ```mermaid graph LR A[客户端] -->|character_set_client| B(MySQL服务) B -->|character_set_connection| C[SQL解析] C -->|character_set_results| D[结果集返回] D --> A ``` > 配置文件修改确保全链路使用UTF8MB4[^1][^2] #### 四、常见问题解决 1. **配置未生效**: - 检查配置文件路径:`mysql --help | grep "Default options"` - 确认配置文件权限(Linux需`sudo`) 2. **混合字符集环境**: ```sql SET NAMES utf8mb4; -- 会话级临时覆盖 ALTER DATABASE mydb CHARACTER SET utf8mb4; -- 数据库级修改 ``` 3. **应用程序连接**: - JDBC连接串添加:`?useUnicode=true&characterEncoding=UTF-8` - PHP PDO添加:`$pdo->exec("SET NAMES utf8mb4");` #### 五、配置原理说明 | 配置块 | 作用范围 | 关键参数 | |-------------|----------------|------------------------| | `[client]` | 所有客户端工具 | default-character-set | | `[mysql]` | mysql命令行工具 | default-character-set | | `[mysqld]` | 服务器全局设置 | character-set-server | > 三层配置确保从客户端到服务器的全链路UTF8MB4支持[^2][^3] #### 六、MySQL各版本差异 | 版本 | 默认字符集 | 推荐配置方式 | |------------|-----------|--------------------------| | **5.7以下** | latin1 | 必须显式配置UTF8MB4 | | **8.0+** | utf8mb4 | 仍建议显式配置以防覆盖 | > MySQL 8.0即使默认utf8mb4,但客户端连接仍可能继承系统设置[^4] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值