1. 程式人生 > >PostgreSQL: 如何處理匯出的資料中文顯示亂碼問題?

PostgreSQL: 如何處理匯出的資料中文顯示亂碼問題?

在資料庫維護過程中,經常有需求匯出生產庫的部分資料,並且要求將資料儲存為
Excel 形式, 對於 Oracle 來說,這是非常簡單的工作,因為有 plsqldev 等圖形化工具,
且功能非常強大,可以匯出 Excel, 對於 PG 來說,這方面的支援就少了,首先圖形化介面
工具少,另外常用的PG GUI工具 pgadmin 功能非常簡單,沒有匯出資料到 excel 的功能,

        儘管如此, PostgreSQL 本身提供的 copy 命令可以實現此功能,可以將資料導成 csv 
格式。但是在某些 Linux 環境下匯出的 csv 檔案,傳輸到 windows 環境下開啟中文卻顯示
亂碼, 本文介紹兩種解決 csv 檔案在 windows 下顯示為亂碼的方法。
 

方法一:
     一般 PostgreSQL 建庫都是用的 UTF8 字符集, 在 UTF8 字符集情況下如果中文不能
正常顯示,可以設定客戶端字符集,修改成 " GBK " ,命令如下:

--修改客戶端字符集
postgres=# show client_encoding;
 client_encoding 
-----------------
 UTF8
(1 row)

postgres=# set client_encoding='GBK';
SET

--copy 匯出資料到 GBK 編碼型別的 csv 檔案
skytf=# copy skytf.test_2 to '/home/postgres/script/tf/skytf.test_2.csv' with csv header;
COPY 1000000
      
   備註:此時通過 sftp 將 csv 檔案傳到 windows 本機,就不會出現亂碼了。
   
  

方法二: 使用 iconv 工具更改檔案編碼
          iconv 是 linux 命令,用來轉換檔案的編碼的 ,手冊解釋如下 "Convert encoding of
given files from one encoding to another",我們可以使用 iconv 命令轉換檔案的編碼,如果 utf8
編碼的檔案中文顯示為亂碼,可以使用 iconv 命令將 UTF8 格式檔案轉換成 gb18030,參考步驟:

--匯出資料到 utf8 編碼型別檔案。
skytf=# set client_encoding='UTF8';
SET

skytf=# show client_encoding;
 client_encoding 
-----------------
 UTF8
(1 row)

skytf=# copy skytf.test_2 to '/home/postgres/script/tf/skytf.test_2.csv' with csv header;
COPY 1000000

--將檔案編碼由 utf8 轉換成 gb18030
iconv -f utf-8 -t gb18030 skytf.test_2.csv -o skytf.test_2_gbk.csv


附: iconv 命令參考
[[email protected]]$ iconv --help
Usage: iconv [OPTION...] [FILE...]
Convert encoding of given files from one encoding to another.

 Input/Output format specification:
  -f, --from-code=NAME       encoding of original text
  -t, --to-code=NAME         encoding for output

 Information:
  -l, --list                 list all known coded character sets

 Output control:
  -c                         omit invalid characters from output
  -o, --output=FILE          output file
  -s, --silent               suppress warnings
      --verbose              print progress information

  -?, --help                 Give this help list
      --usage                Give a short usage message
  -V, --version              Print program version

Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.

For bug reporting instructions, please see: