PostgreSQL迁移至MySQL遇\xF1o字符串错误,求解决方案
PostgreSQL转MySQL迁移字符集报错解决方案
一、修复PostgreSQL端编码环境
原数据库的C/荷兰语编码会导致特殊字符(如ñ)无法正确转换,需创建纯UTF8编码的中转库:
- 基于template0创建指定编码和排序规则的数据库(Windows环境适用):
CREATE DATABASE pg_utf8_db WITH ENCODING 'UTF8' LC_COLLATE 'English_United States.65001' LC_CTYPE 'English_United States.65001' TEMPLATE template0; - 导出原库数据并导入到新UTF8库:
# Windows下需替换为PostgreSQL安装目录的bin路径 "C:\Program Files\PostgreSQL\{版本号}\bin\pg_dump.exe" -d old_pg_db -f pg_data_dump.sql "C:\Program Files\PostgreSQL\{版本号}\bin\psql.exe" -d pg_utf8_db -f pg_data_dump.sql
二、确认MySQL配置生效
修改my.ini后需确保配置完全生效:
- 重启MySQL服务,执行以下SQL验证:
需确保SHOW VARIABLES LIKE '%character%'; SHOW VARIABLES LIKE '%collation%';character_set_client、character_set_connection、character_set_results均为utf8mb4,collation_connection为utf8mb4_unicode_ci。 - 若使用root用户迁移,需手动执行以下语句(init_connect对超级用户不生效):
SET collation_connection = utf8mb4_unicode_ci; SET NAMES utf8mb4;
三、调整MySQL Workbench迁移设置
- 源数据库连接:在PostgreSQL连接的高级选项中,添加
client_encoding=UTF8参数,强制以UTF8编码读取PostgreSQL数据。 - 目标表配置:确认
aat表的rdfs__label列字符集为utf8mb4,排序规则为utf8mb4_unicode_ci。 - 数据迁移步骤:勾选「使用批量插入」选项,减少单条数据插入时的编码转换异常。
四、手动导入备选方案
若Workbench仍报错,直接通过SQL文件迁移:
- 用pg_dump导出UTF8库的数据为SQL文件,用Notepad++将文件编码转换为UTF-8(无BOM)。
- 用MySQL命令行导入:
导入前先执行mysql -u {用户名} -p {目标库名} < pg_utf8_data_dump.sqlSET NAMES utf8mb4;确保编码一致。
内容的提问来源于stack exchange,提问作者Jeroen Steen
相关产品推荐
相关产品推荐

