MySQL5.6迁移至MySQL8遇'utf8mb3未知字符集'错误求助
解决MySQL 8.0迁移后utf8mb3字符集错误问题
1. 彻底修正备份文件的字符集引用
- 打开备份SQL文件,执行全局替换:
- 将所有
utf8替换为utf8mb4 - 将所有
utf8mb3替换为utf8mb4
- 将所有
- 检查文件开头的SET语句,确保所有字符集相关配置都是utf8mb4,示例:
SET character_set_client = utf8mb4; SET character_set_connection = utf8mb4; SET character_set_results = utf8mb4;
2. 重新配置数据库字符集
- 执行以下SQL语句(替换
your_database_name为实际库名):ALTER DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; - 重新连接数据库会话,再执行
SHOW VARIABLES LIKE 'char%';和SHOW VARIABLES LIKE 'collation%';,确认character_set_database和collation_database已变为utf8mb4相关值
3. 修改MySQL全局配置(避免重启后还原)
- 找到MySQL的配置文件(Linux为
/etc/my.cnf或/etc/mysql/my.cnf,Windows为my.ini),添加或修改以下内容:[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_0900_ai_ci [client] default-character-set=utf8mb4 - 重启MySQL服务,再次检查字符集变量确认生效
4. 修正SQLAlchemy连接字符串
- 在应用的数据库连接URL中明确指定charset=utf8mb4,示例:
mysql+mysqldb://username:password@host:port/your_database_name?charset=utf8mb4
5. 重新导入备份并验证
- 使用修正后的备份文件重新导入数据库
- 随机抽查几个表的字符集配置,确认表和列都使用utf8mb4:
SHOW CREATE TABLE your_table_name;
注意事项
character_set_system是MySQL系统元数据使用的字符集,默认就是utf8mb3,无需修改,不会影响业务正常运行。
内容的提问来源于stack exchange,提问作者filifunk
相关产品推荐
相关产品推荐

