MySQL乱码怎么解决_MySQL设置UTF-8字符集教程

15次阅读

MySQL 中文乱码需统一设置 utf8mb4 字符集:检查各层字符集、修改配置文件、转换库表编码、确保客户端连接指定 utf8mb4,并验证插入查询结果。

MySQL 乱码怎么解决_MySQL 设置 UTF- 8 字符集教程

如果您在 MySQL 中插入中文数据后出现问号或方块等乱码现象,则可能是由于 MySQL 服务器、数据库、数据表或连接层的字符集未统一设置为 UTF-8。以下是解决此问题的步骤:

一、检查当前字符集配置

需确认 MySQL 各层级实际生效的字符集,避免仅修改 配置文件 但未重启服务或未生效。通过 SQL 命令可实时查看运行时参数。

1、登录 MySQL 客户端:mysql -u root -p

2、执行命令查看全局字符集:SHOW VARIABLES LIKE ‘character_set%’;

3、执行命令查看排序规则:SHOW VARIABLES LIKE ‘collation%’;

4、确认结果中 character_set_servercharacter_set_databasecharacter_set_clientcharacter_set_connectioncharacter_set_results 五项是否均为 utf8mb4

二、修改 MySQL 配置文件永久生效

通过编辑 my.cnf(Linux)或 my.ini(Windows)文件,使服务器启动时加载 UTF- 8 相关配置,覆盖默认 latin1 设置。

1、找到 MySQL 配置文件路径,常见位置为 /etc/my.cnf、/etc/mysql/my.cnf、/usr/etc/my.cnf(Linux)或 C:ProgramDataMySQLMySQL Server X.Xmy.ini(Windows)

2、在 [mysqld] 段落下添加以下内容:character-set-server = utf8mb4

3、在 [client] 段落下添加:default-character-set = utf8mb4

4、在 [mysql] 段落下添加:default-character-set = utf8mb4

5、保存文件并重启 MySQL 服务:systemctl restart mysqld(Linux)或通过服务管理器重启(Windows)

三、修改已有数据库与数据表字符集

已创建的数据库和表若原使用 latin1 或 utf8(非 utf8mb4),需显式转换字符集及排序规则,否则新配置不作用于旧对象。

1、修改指定数据库默认字符集:ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

2、修改指定数据表字符集:ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

3、仅修改表结构而不转换数据(谨慎使用):ALTER TABLE table_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

4、验证修改结果:SHOW CREATE DATABASE database_name; 和 SHOW CREATE TABLE table_name;

四、确保客户端连接使用 UTF-8

即使服务端配置正确,若客户端连接时未声明字符集,仍会触发隐式转换导致乱码。必须在连接建立阶段明确指定。

1、在 MySQL 客户端连接后立即执行:SET NAMES utf8mb4;

2、若使用 JDBC,连接 URL 末尾追加参数:?characterEncoding=utf8mb4&serverTimezone=UTC

3、若使用 PHP mysqli,连接后调用:mysqli_set_charset($connection, ‘utf8mb4’);

4、若使用 Python PyMySQL,初始化连接时传入参数:charset=’utf8mb4′

五、验证插入与查询结果

完成全部配置后,需通过真实数据写入与读取操作验证是否彻底解决乱码,排除缓存或 前端 渲染干扰。

1、创建测试表:CREATE TABLE test_utf8 (id INT PRIMARY KEY, name VARCHAR(100)) ENGINE=InnoDB;

2、插入含中文数据:INSERT INTO test_utf8 VALUES (1, ‘ 张三 ’), (2, ‘苹果

text=ZqhQzanResources