PostgreSQL 9.5错误:编码的字节序列无效" UTF8":0xc3 0xee

时间:2016-07-28 08:35:03

标签: sql database postgresql encoding utf-8

最近,我们使用pg_dump和pg_restore实用程序将所有数据库从Debian 5上的PostgreSQL版本8.4迁移到运行CentOS 6.5的不同服务器上的PostgreSQL版本9.5。数据库的编码为SQL_ASCII 表包含大量编码数据。剩余的数据库似乎正常工作,但只是特定的数据库。

当我尝试从新服务器上的数据库中获取数据时,我收到:

megaart_www=# select * from data_tbl limit 10;
ERROR:  invalid byte sequence for encoding "UTF8": 0xc1 0xe0

为了确保两台​​服务器上的配置完全相同,我运行这些命令。结果是一样的。

postgres=# SHOW client_encoding;
 client_encoding 
-----------------
 UTF8
(1 row)
postgres=# SHOW server_encoding;
 server_encoding 
-----------------
 UTF8
(1 row)

数据库的编码:

megaart_www=# show server_encoding;
 server_encoding 
-----------------
 SQL_ASCII
(1 row)

数据库服务器配置完全相同,但仍会收到错误。

1 个答案:

答案 0 :(得分:1)

所以你的server_encoding是新服务器上的SQL_ASCII,但你的client_encoding是UTF8吗?基本上它说UTF8不知道那些字节的翻译。我想如果你使你的client_encoding匹配:SET client_encoding ='SQL_ASCII'并重复查询,它将正常工作。您是否真的希望将数据存储为SQL_ASCII,这是您需要回答的问题。

服务器编码是在实例创建时配置的,因此如果您需要它来匹配旧服务器(即UTF8),则需要重新创建实例并重新加载数据。可以在会话级别更改客户端编码。这是导致错误的这两个参数的翻译。