MySQL迁移后字符集不一致的核心是客户端、连接层、表结构、存储引擎四层必须统一为UTF8MB4;需逐层检查并修改配置、库表编码及应用连接字符串,确保全链路一致。

MySQL迁移后字符集不一致,核心是确保 客户端、连接层、表结构、存储引擎 四个层面统一使用 UTF8MB4(推荐)或至少 UTF8。只改某一层,问题仍会复现。
登录 MySQL 后逐条执行:
SHOW VARIABLES LIKE 'character_set_server';
SHOW CREATE DATABASE db_name;
SHOW CREATE TABLE table_name;
SHOW VARIABLES LIKE 'character_set_client'; 和 SHOW VARIABLES LIKE 'collation_connection';
先改库,再改表,避免新旧混用:
ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE table_name MODIFY column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
编辑 MySQL 配置文件(如 /etc/my.cnf 或 /etc/mysql/my.cnf),在 [mysqld] 和 [client] 段落中加入:
[mysqld] 下添加:character-set-server = utf8mb4collation-server = utf8mb4_unicode_ci
[client] 和 [mysql] 下添加:default-character-set = utf8mb4
修改后重启 MySQL 服务生效。
即使服务端已设好,客户端不声明仍可能走默认编码(如 latin1)。常见写法:
?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=Asia/Shanghai
charset='utf8mb4'
$mysqli->set_charset("utf8mb4");
不依赖驱动自动推断,始终显式声明。
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号