You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MySQL数据库转储文件转换为PostgreSQL?解决编码恢复错误

解决MySQL cp1251编码转储文件恢复到PostgreSQL的编码错误问题

这个问题我之前帮朋友处理过,核心是cp1251编码的MySQL转储文件和PostgreSQL默认的UTF8编码不兼容,再加上两种数据库的SQL语法差异,直接导入肯定会报错。给你几个靠谱的解决办法,按推荐程度排序:

方法一:编码转换+专业迁移工具(最推荐)

先把文件编码转成UTF8,再用专门的工具处理MySQL到PostgreSQL的语法差异,一步到位。

  1. 转编码为UTF8

    • 在Linux/macOS或Git Bash里用iconv命令:
      iconv -f cp1251 -t utf-8 dump.sql > dump_utf8.sql
      
    • Windows下如果没有iconv,也可以用Notepad++:打开dump.sql,点击顶部菜单栏「编码」→「转为UTF-8」,然后保存为新文件。
  2. 用pgloader处理语法转换+导入
    pgloader是专门做数据库迁移的工具,能自动处理大部分MySQL和PostgreSQL的语法差异(比如AUTO_INCREMENT转SERIAL、函数名适配、类型转换等),还能直接加载转码后的SQL文件:

    pgloader dump_utf8.sql pgsql://your_pg_user:your_pg_pass@localhost/your_target_db
    

    如果还能直接连接到源MySQL数据库,更简单:

    pgloader mysql://your_mysql_user:your_mysql_pass@localhost/your_mysql_db pgsql://your_pg_user:your_pg_pass@localhost/your_target_db
    

    它会自动处理编码和语法,比手动改省心太多。

方法二:重新导出MySQL数据为PostgreSQL兼容格式

如果还能访问源MySQL数据库,直接导出时就指定兼容PostgreSQL的格式和UTF8编码,省掉后续转码步骤:

mysqldump --compatible=postgresql --default-character-set=utf8 -u your_mysql_user -p your_mysql_db > dump_compatible.sql

然后直接用psql your_target_db < dump_compatible.sql导入就行,不过这个选项只能处理基础语法,复杂对象(比如触发器、存储过程)可能还是需要手动调整。

方法三:临时创建cp1251编码的PostgreSQL数据库中转

如果不想用工具,也可以先在PostgreSQL里建一个cp1251编码的临时库,导入后再转成UTF8:

  1. 创建临时库(注意指定排序规则,避免乱码):
    CREATE DATABASE temp_cp1251_db WITH ENCODING 'WIN1251' LC_COLLATE 'Russian_Russia.1251' LC_CTYPE 'Russian_Russia.1251' TEMPLATE template0;
    
  2. 导入原dump文件:
    psql temp_cp1251_db < dump.sql
    
  3. 导出为UTF8编码的SQL:
    pg_dump -E UTF8 temp_cp1251_db > temp_utf8_dump.sql
    
  4. 导入到目标UTF8数据库:
    psql your_target_db < temp_utf8_dump.sql
    
    这个方法适合应急,但要注意如果有特殊字符,转码时可能出现小问题,建议导入后检查数据。

注意事项

  • 转编码后一定要打开文件检查下特殊字符(比如俄语字符)是否显示正常,避免转错编码导致乱码。
  • 复杂的存储过程、触发器、自定义函数,不管用哪种方法,大概率需要手动调整语法,因为MySQL和PostgreSQL的PL/SQL差异比较大。
  • 如果用pgloader,建议先测试小表的迁移,确认没问题再全量导入。

内容的提问来源于stack exchange,提问作者evans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:31:49