mysqldump备份字符集与排序规则保留及编码相关疑问
MySQL备份中utf8mb4相关问题解答
一、/*!50503 SET character_set_client = utf8mb4 */;的作用
- 这是MySQL的条件执行注释:
50503对应MySQL版本5.5.3,只有当数据库版本≥5.5.3时,这条语句才会被执行(你的MySQL 8满足条件,会生效) - 作用是设置当前恢复会话的客户端字符集为utf8mb4,确保备份文件中的SQL语句和字符串数据,在恢复时能以utf8mb4编码被正确解析,避免出现乱码问题
二、utf8mb4与utf8、utf8_general_ci/utf8_unicode_ci的兼容性
- MySQL中的
utf8实际上是utf8mb3,仅支持3字节以内的Unicode字符;而utf8mb4是完整的UTF-8实现,支持4字节字符(如emoji、生僻汉字) - utf8mb4完全兼容utf8:所有能存在utf8中的数据,都可以毫无损失地存入utf8mb4,读取时也不会出现乱码或数据错误
- 对于排序规则:utf8_general_ci、utf8_unicode_ci是utf8对应的排序规则,utf8mb4有对应的utf8mb4_general_ci、utf8mb4_unicode_ci。如果原数据用的是utf8+utf8_general_ci/utf8_unicode_ci,恢复到utf8mb4字符集的表中时,原排序逻辑完全兼容,不会影响数据的排序和查询结果
额外备份建议
如果希望备份文件强制使用utf8字符集,可以在mysqldump命令中添加参数:
mysqldump -u root -p --default-character-set=utf8 DBName > backupName.sql
不过更推荐保留utf8mb4的设置,因为它兼容现有utf8数据的同时,还支持更多字符类型,未来扩展性更好
内容的提问来源于stack exchange,提问作者user2342558
相关产品推荐
相关产品推荐

