我正在将一些数据库从 Postgres 7.4.8 移至 CentOS 5 上的 8.4.5。在旧数据库中,编码是 UNICODE。因此我执行了文本 pg_dump,创建了我的新数据库,如下所示:
createdb --template template0 --encoding unicode testdb
并导入数据:
psql testdb < testdb.dmp >& testdb.out
不幸的是,这些错误随处可见:
错误:编码“UTF8”的字节序列无效:0x8e
我知道 iconv 是修复此问题最常用的工具,但我不确定转换是什么。我尝试将其从 Unicode 转换为 UTF8,因为 Postgres 为我的新数据库报告了 UTF8,但这会产生一个看起来像中文字符的文件。我还尝试了 UTF8 到 UTF8;这会在第一个有问题的字符上卡住,如下所示:
iconv:位置 874924 处的输入序列非法
我想知道:a) 为什么我没有更改字符集时会出现问题?b) 除了手动编辑转储文件外,还有其他方法可以修复此问题吗?
谢谢!
答案1
为了方便以后查看...结果(我认为)我在数据中混合了几种不同的字符集。所以我最后做的是先运行
iconv -f macintosh -t utf-8
修复重音字符 a 和其他导致导入出现问题的字符,然后进行手动搜索和替换,以删除所有 Windows 智能字符,这些字符在上述转换过程中被破坏。之后,所有内容都干净地导入 Postgres 中,看起来没问题。这不是最好的解决方案,但我能想到的唯一可行的方法。