簡單講,資料庫與客戶端的文字編碼,不見得需要一致。相信開發者都曾經碰過,需要同時服務中國與台灣使用者的狀況,中國使用者輸入的是GB編碼的簡體,台灣使用者輸入的是BIG5編碼的繁體中文,兩者的資料都存入UTF8編碼的資料庫中。
在這種狀況下,開發Web版的程式還算簡單,但如果是開發AP版的程式,那就真得有點欲哭無淚了。
在PostgreSQL的使用手冊,第二十二章中有提到Localization,它提出了資料庫伺服端和程式客戶端文字編碼的說明,並支援一些常見的搭配組合。
使用上
1 .使用psql
以下列形式的指令,進行客戶端編碼設定
\encoding BIG5
2. 在程式中,下SQL指令換編碼
SET CLIENT_ENCODING TO 'value';
顯示現在的客戶端文字編碼
SHOW client_encoding;
取得系統預設的文字編碼
RESET client_encoding;
以我個人的使用經驗來看,資料庫的編碼最好使用UTF8,之前使用的EUC_TW, BIG5, MULE_INTERNAL等,現在完全可以放棄了。
Jeff大哥您好,想請教一個 postgreSQL 問題.
回覆刪除小弟環境為以下
OS:Windows 2003 server
SQL:PostgreSQL 9.0
db name:postgres (UTF-8)
需要將以tab作分隔符號的文字檔,轉入一張資料表中
因為文字檔中有中文字, 所以先將文字檔通過 java 的 native2ascii 處理,所有中文轉成以\u9834\u4398 字樣 (當然該文字檔也是 UTF-8).
在 psql 中再用以下語法作匯入
COPY mytable FROM 'D://test.txt' WITH DELIMITER AS ' ';
資料是成功轉入了,但是問題來了
以 postgresql 的查詢工具查詢欄位內容, 中文字則變成 u9834u4398
而非原來的中文字, 不知為什麼 "\"符號也消失了, 這是為什麼呢?
但是小弟以 JSP 透過 JDBC 插入資料,語法如下:
INSERT INTO test(aa,bb)VALUES('\u9834','\u4398 ')
再以 postgresql 的查詢工具查, 結果中文可以正常顯示.
是 JDBC 有對一些編碼作處理, 但 COPY..FROM 卻沒有嗎?
試了近一個星期也查了網路許多資料都找不到解決方法.請Jeff大哥指示.
感激不盡!
p.s 您可以直接回覆在文章,我都會過來看您文章,謝謝!