二、解决中文乱码的步骤

目标:让客户端连接编码数据库编码保持一致(统一为utf8)。

1. 临时修改当前连接的编码(立即生效,仅当前会话有效)

在 MariaDB 命令行中执行以下命令,将连接编码改为utf8

sql

1
2
3
4
5
6
-- 修改客户端发送数据的编码
SET character_set_client = utf8;
-- 修改连接层编码
SET character_set_connection = utf8;
-- 修改返回结果的编码
SET character_set_results = utf8;

执行后,重新测试中文插入 / 查询,看是否还会乱码(若解决,说明是连接编码问题)。

2. 永久修改编码配置(推荐,重启后生效)

临时修改仅对当前会话有效,关闭连接后失效。需修改 MariaDB 的配置文件,永久统一编码:

(1)找到配置文件

MariaDB 的配置文件通常是:

  • Windows:C:\Program Files\MariaDB 10.3\my.ini(或my.cnf
  • Linux:/etc/my.cnf/etc/mysql/my.cnf
(2)编辑配置文件

在文件中添加 / 修改以下内容(确保覆盖客户端和服务端):

ini

1
2
3
4
5
6
7
8
9
10
11
12
[mysqld]
# 服务端编码(数据库/表默认编码)
character-set-server = utf8
collation-server = utf8_general_ci # 推荐用general_ci(不区分大小写),而非bin(二进制)

[client]
# 客户端连接默认编码
default-character-set = utf8

[mysql]
# mysql命令行客户端编码
default-character-set = utf8
(3)重启 MariaDB 服务
  • Windows:通过 “服务” 找到MariaDB,右键 “重启”
  • Linux:systemctl restart mariadbservice mariadb restart

3. 验证修改是否生效

重启后,重新登录 MariaDB,执行以下命令检查:

sql

1
SHOW VARIABLES LIKE 'character_set_%';

character_set_clientcharacter_set_connectioncharacter_set_results均变为utf8,则配置生效。

4. (可选)优化数据库编码为utf8mb4

如果需要支持 emoji 或更多特殊中文,建议将数据库 / 表编码升级为utf8mb4(完整支持 UTF-8):

sql

1
2
3
4
5
6
7
8
9
-- 修改数据库编码
ALTER DATABASE sky_take_out
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;

-- 逐个修改表编码(确保数据已备份)
ALTER TABLE address_book CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE category CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 其他表同理...

img

同时,配置文件中的character-set-server需改为utf8mb4collation-server改为utf8mb4_general_ci

三、总结

中文乱码的直接原因是客户端连接编码(gbk)与数据库编码(utf8)不匹配,通过统一两者为utf8(或utf8mb4)即可解决。优先执行临时修改验证,再通过配置文件永久生效,确保后续连接不再出现编码问题。

编辑分享

除了修改字符集编码,还有其他方法解决MariaDB数据库中的中文乱码问题吗?

执行了SET character_set_client = utf8; SET character_set_connection = utf8; SET character_set_results = utf8; 后,如何确认客户端连接编码已经修改为utf8?

如何通过修改MariaDB的配置文件来永久修改字符集编码?