post by tommy @ 01 二月, 2007 00:01
原本以為是 PostgreSQL ODBC driver 的問題, 特地上網抓了新版的回來用, 結果一樣. 後來在程式中加上顯示 odbc 錯誤訊息的功能後, 出現了下頭的錯誤:
client encoding mismatch
到 Google 找了一下, 發現自從 PostgreSQL 8.1 之後, 把原本的 UNICODE 改成 UTF-8, 結果, 在 windows 底下使用 ODBC 連線到 UTF-8 的資料庫時, 就會出現上頭的錯誤訊息.
不過, 似乎沒有看到什麼方式可以在連線時設定要使用的字元集. 只有看到這篇文章 , 上頭提到了可以把使用者所使用的字元集改成 latin1, 來避開這個問題:
alter user <user> SET client_encoding to LATIN1;
不過, 我們的系統, 該使用者並非只用在 windows 上頭, 在其他的 linux 上頭也是用這個使用者, 而且, 雖然在 windows 上頭的這個, 並不會用到 UTF-8 (UNICODE) 的字元, 不過, 其他的地方, 仍可能使用到.
所以, 我們就建立一個新的使用者, 把這個新的使用者的字元集改成 latin1, 然後讓所有在 windows 下用到 ODBC 連線的程式, 都改用這個新的使用者. 這樣子, 就可以解決這個問題了.