2016-07-28 731 views
0

最近我們遷移和PostgreSQL 8.4版的所有數據庫Debian的5到PostgreSQL 9.5版使用的pg_dump和pg_restore的公用事業運行的CentOS 6.5不同的服務器上。數據庫的編碼是SQL_ASCII 表包含巨大的編碼數據。剩餘的數據庫似乎正常工作,但只有特定的數據庫。的PostgreSQL 9.5錯誤:編碼「UTF8」無效的字節序列:0xc3 0xee

當我嘗試新的服務器上的數據庫獲取數據,我收到:兩個服務器上

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

所以你SERVER_ENCODING是在新服務器上SQL_ASCII,但你的CLIENT_ENCODING是UTF8?基本上說UTF8不知道這些字節的翻譯。我想如果你讓你的client_encoding匹配:SET client_encoding ='SQL_ASCII'並重複查詢,它會正常工作。無論您是否真的希望將數據存儲爲SQL_ASCII,這都是您需要回答的問題。

服務器編碼配置在實例創建時間,所以如果你需要它來匹配您的舊服務器又名UTF8,你就需要重新創建實例,並重新加載數據。客戶端編碼可以在會話級別更改。這是導致錯誤的這兩個參數的翻譯。

+0

正如我上面提到的舊服務器上CLIENT_ENCODING'UTF8',它工作正常。 –

+0

我不認爲你讀了我放的東西。 – d1ll1nger

相關問題