2007-03-01

PostgreSQL 中文編碼 "碁" 字已知的問題討論

更新:2007-03-01
對映章節:

內容:
首先感謝 Dylan. Kuo 提出的討論題, 也感謝 PostgreSQL 中國社群朋友 阿弟, wolfman 協助測試.

PostgreSQL 雖然支援編碼轉換系統, 但這問題我初步認為是"EUC_TW"
在做了 client_encoding 變動成 big5 OR utf8 時
"BIG-5"<----EUC_TW."碁"---->"UTF8"
Mapping 不到導致單一表 Select error
.

阿弟:
server->utf8,client->big5也是同样的问题,如果
server->utf8,client->gbk就没有问题

wolfman:
erver是euc_tw的时候, 错误跟你的一样.
如果server是utf8的时候,
gbk/utc_tw/utf8都能执行, 但在psql下只有gbk正确显示.
big5时,错误跟你的一样


擷取信件內容如下:
問題:

小弟的環境是裝 PostgreSQL 7.2.4, Server Encoding 是 EUC_TW,
client encoding 是設成 BIG5, 已經用了很多年了, 最近想將DB migration 到 8.2,
Server 跟 Client 的 encoding 還是跟原來的一樣, 轉入的時候, 看起來是沒問題, 但是
當使用 PGAdmin III 的時候, "碁"這個字就無法查詢出來, 會出現底下的錯誤訊息

ERROR: character 0x8ea3c3b7 of encoding "EUC_TW" has no equivalent in "UTF8"
SQL 狀態: 22P05



經過了小弟使用 pgAdmin 1.6.2+, phpPgAdmin4.1+, Navicat PostgreSQL 7.2.9
Win32 Dos Client and Debian 的來回測試得到以下的結論, 供您參考:

原因應該是出在 encoding 非 PostgreSQL 身上
"碁"字在現行的 EUC_TW 版本無法 Mapping "big5" & "unicode" 上
導致這錯誤, 細節就可能要查 編碼系統 是否為同時期一致的問題,
也許在您的使用基點時間上 big5<----->euc_tw"碁"字是可行,
但在我的 OS & DBMS 上 ERROR 是因為編碼也隨著年代在改版
但轉換間 mapping 不到造成的問題 (目前先這樣自圓其說@@"")

1.pgAdmin III 在 GUI 的介面上全使用 UTF-8 來輸出, 等同 pgAdmin 在背後自己對
DB "set client_encoding = utf8", 這同樣發生在 phpPgAdmin and Navicat 有雷同的結果.

2.在win dos client and debian 當 user login 時, client_encoding 均會採用與 server_encoding
的值來當default, 不會產生錯誤.

但是我直接在 shell 上面使用 psql 進去查詢的時候(client_encoding 是設成 BIG5), 這時是正常的,

您正常, 但我仍是ERROR ....

我知道 PGAdmin III 是建議使用 UNICODE的編碼方式, 我強迫設 set client_encoding=BIG5

我使用的時間並長, UTF8一直都是我的預設值
只能建議您可能的話轉存成 UTF8, 若直的需要用到 BIG5 OR EUC_TW
再使用 PostgreSQL 豐富的 convert() 函數內容配合 Views 來實作.
簡易的參考小弟有寫一篇簡單的

PostgreSQL 編碼轉換(Convert)與應用技巧

更詳細的就要請您參考官方文件囉 :-)

沒有留言:

網誌存檔

PostgreSQL & Google-Analytics Running...

::Planet PostgreSQL::

PostgreSQL Information Page

PostgreSQL日記(日本 石井達夫先生Blog)

PostgreSQL News

黑喵的家 - 資料庫相關

Google 網上論壇
PostgreSQL 8 DBA 專業指南中文版
書籍內容討論與更多下載區(造訪此群組)
目錄下載: PostgreSQL_8 _DBA_Index_zh_TW.pdf (更新:2007-05-18)

全球訪客分佈圖(Google)

全球訪客分佈圖(Google)