Postgresql

windows和linux之間的編碼和pg_dump/restore問題

  • December 3, 2013

我有一個使用 WIN1252 編碼的 pg_dump 創建的 dmp 文件。我想做的是使用 pg_restore 將它導入 Linux 機器上的數據庫。問題是在 Windows 機器上 postgreSQL 辨識編碼 WIN1252 但不辨識 CP1252 編碼(它們都是相同的,只是相同標準的不同名稱)。在 Linux 機器上,postgreSQL 辨識 CP1252 而不是 WIN1252。因此,當我嘗試執行 pg_restore 時出現錯誤,因為 WIN1252 未被辨識為正確的編碼。此外,如果我嘗試在 Windows 上執行 pg_dump 並將編碼指定為 CP1252,我會收到類似的錯誤。我想堅持使用這種編碼格式,所以在 utf8 中做一個 pg_dump 或者我不想做的事情。任何幫助,將不勝感激!

編輯:實際上,經過進一步調查,postgreSQL 不理解 cp1252。用於將文本文件從一種編碼轉換為另一種編碼的 iconv linux 命令理解 cp1252 而不是 win1252,這就是我從中得到它的地方。在 Linux 機器上,我仍然無法將客戶端編碼設置為 WIN1252。這是錯誤消息:

FATAL:  conversion between WIN1252 and LATIN1 is not supported

變數 client_encoding 在 Linux 機器上最初設置為 UTF8,所以我不知道 LATIN1 來自哪裡。除非不支持 WIN1252,否則 postgres 會嘗試將其轉換為 latin1,因為這是最接近它的東西,並且由於某些字元不匹配而無法實現?

我想您擁有的轉儲文件以 WIN1252 編碼,Linux 上的目標數據庫將 LATIN1 作為伺服器編碼。正如錯誤消息所說,那是行不通的。

我建議您使用 UTF8 重新初始化目標數據庫。

pg_dump -E或者,使用該選項以 UTF8 格式創建轉儲。

解決方案是使用“iconv”實用程序。 cat dump.sql | iconv | psql. 這通常會清理您的編碼。

見: http: //www.documentroot.com/2013/12/utf8-encoding-and-postgres-dump.html

引用自:https://dba.stackexchange.com/questions/35112