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, 不會產生錯誤.
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 來實作.
簡易的參考小弟有寫一篇簡單的
沒有留言:
張貼留言