MySQL数据库导入捷克语特殊字符(ě ř č ů)乱码问题咨询
解决latin1编码MySQL数据库迁移至UTF-8时的捷克语字符乱码问题
一、正确导出旧数据库(从latin1库生成无乱码的SQL文件)
旧库用latin1存储捷克语字符,导出时必须匹配原字符集再转成UTF-8:
- 打开旧主机的phpMyAdmin,选中目标数据库
- 切换到「导出」标签页,选择自定义导出模式
- 在「字符集」设置区域:
- 「数据库系统的字符集」选
latin1(和旧库一致) - 「输出字符集」选
utf8mb4(或utf8,推荐前者支持更全的Unicode字符)
- 「数据库系统的字符集」选
- 勾选「添加DROP TABLE / VIEW...语句」,避免导入时表冲突
- 确认导出的SQL开头保留旧库的字符集声明,不要强行替换成utf8,然后导出保存SQL文件
二、正确导入到新主机的UTF-8库
新库先做好字符集配置,再导入:
- 在新主机phpMyAdmin创建空数据库,字符集设为
utf8mb4,排序规则选utf8mb4_czech_ci(专门适配捷克语,也可用utf8mb4_unicode_ci) - 进入「导入」标签页,选择刚才导出的SQL文件
- 「字符集」下拉框选
utf8mb4(和导出时的输出字符集一致) - 执行导入,完成后检查ě、ř、č、ů这些特殊字符是否正常显示
三、修复已导入的乱码数据
如果已经把乱码数据导入了新库,按以下步骤修复:
- 先把表临时转回latin1,还原原始编码:
ALTER TABLE bookings CONVERT TO CHARACTER SET latin1 COLLATE latin1_swedish_ci;
- 按照上面的正确导出步骤,重新导出数据(输出字符集选utf8mb4)
- 把表改回utf8mb4,再导入刚导出的正确SQL:
ALTER TABLE bookings CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_czech_ci;
关键注意点
- 之前直接改表CHARSET为utf8能插入新字符,是因为新数据直接以utf8编码存储,但旧数据是latin1编码被错误解析成utf8,所以显示乱码
- 网站代码的数据库连接要同步设置
SET NAMES utf8mb4,确保后续读写数据的字符集一致,避免再次出现乱码
内容的提问来源于stack exchange,提问作者admec986
相关产品推荐
相关产品推荐

