PHP中数据库UTF-8排序规则问题:迁移后重音及ñ字符显示异常
解决数据库迁移后重音/ñ字符显示异常及转换为UTF-8编码的步骤
1. 完整备份原数据库
执行导出命令时务必指定原数据库的字符集(假设原字符集为latin1,可根据实际情况调整):
mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > backup.sql
2. 修改备份的SQL文件
- 打开
backup.sql,全局替换所有表创建语句中的字符集配置:将CHARSET=latin1(或其他非UTF-8字符集)替换为CHARSET=utf8mb4 - 找到文件开头的字符集设置语句,修改为:
SET NAMES utf8mb4; SET CHARACTER SET utf8mb4;
3. 创建新的UTF-8编码数据库
登录MySQL控制台后执行:
CREATE DATABASE 新数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
4. 将修改后的SQL文件导入新数据库
执行导入命令时指定UTF-8字符集:
mysql -u 用户名 -p --default-character-set=utf8mb4 新数据库名 < backup.sql
5. 调整网站数据库连接的字符集配置
以PHP为例:
- 若用mysqli,连接后添加:
mysqli_set_charset($conn, 'utf8mb4'); - 若用PDO,在DSN中添加字符集参数:
$dsn = 'mysql:host=localhost;dbname=新数据库名;charset=utf8mb4';
关键注意事项
- 优先使用
utf8mb4而非utf8,因为utf8mb4支持完整的Unicode字符,兼容性更强 - 若原数据库内容实际是UTF-8但被错误标记为
latin1,直接转换可能导致二次乱码,需严格按照上述步骤,导出时指定原字符集、导入时指定目标字符集,让MySQL自动完成转码
内容的提问来源于stack exchange,提问作者Pipevel
相关产品推荐
相关产品推荐

