我遇到无效UTF8字节序列的问题

时间:2011-09-15 15:49:02

标签: postgresql encoding utf-8 ascii

我正在尝试将POSTGRESQL数据库从一台服务器移动到另一台服务器。为了做到这一点,我做了一个pg_dump,然后在新服务器上创建一个新数据库后,我尝试恢复pg_dumped文件。在大多数情况下,恢复是正常的,但然后一个表没有复制。

pg_restore: [archiver (db)] COPY failed: ERROR:  invalid byte sequence for encoding "UTF8": 0x92
HINT:  This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".

现在,在检查数据库属性之后,事实证明原始表是在SQL_ASC2中编码的,但我创建的新表是UTF8。 我对编码一无所知,但是UTF8不能向后兼容ASC2吗?那么,为什么有一个无效的字节序列?

将新数据库更改为使用SQL_ASC2的数据库会修复此问题吗? 如果我必须更改新数据库的编码,我该怎么做?我可以改变它,还是必须从头开始重新制作整个数据库?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

在连接到数据库之前,您可以将client_encoding设置为'LATIN9'(它可能是什么;无论如何:它将被接受)您可以通过以下方式执行此操作:

1)使用-f my_filename标志发出pg_restore。

2)编辑生成的文件(可能已经有一个“SET client_encoding ='UTF8';”出现在顶部附近。)

3)使用“psql -U username dbname< filename”提交。 (在大多数情况下,您必须提供不同的用户名或dbname;“\ connect newdbname”位于脚本的顶部并将接管。有时您甚至需要先创建用户)

答案 1 :(得分:0)

如果您在* nix框中并且您的pg_dump文件是纯文本,那么您可以尝试通过iconv运行转储文件,然后再将其导入postgres。