問題描述:
達人們,幫忙診斷下是什麼問題
環境:
服務端:CentOs5.5 + oracle 10.2.1, 數據庫的字符集爲: NLS_LANG=AMERICAN_AMERICA.AL32UTF8
客戶端: CentOs5.5 + oracle client 10.2.0 + unixODBC2.3.0, 環境變量爲: NLS_LANG=AMERICAN_AMERICA.AL32UTF8; LANG=en_US.UTF-8
問題:
在客戶端使用sqlplus往表裏寫中文, 可以正確的讀出;
在客戶端使用unixodbc的isql可以從表裏正確讀出sqlplus寫的中文;
在客戶端使用unixodbc的isql向表裏寫的中文是亂碼, 無論是isql還是sqlplus讀出的都是亂碼
從表裏導出原始數據後發現, 數據庫保存的中文好像是 ISO8859-1 轉成 UTF8 的編碼
終於解決了
正如renxiao2003所說,是編碼問題數據庫字符集設置爲: AMERICAN_AMERICA.AL32UTF8
由於系統使用的漢字爲GBK,因此客戶端環境變量設置爲: NLS_LANG=AMERICAN_AMERICA.ZHS16GBK; LANG=en_US
最關鍵的是UNIXODBC的編譯,一定要加上以下兩個選項:
--enable-iconv=yes --with-iconv-char-enc=GB18030
ok,經過以上折騰,通過UNIXODBC寫到數據庫的中文不會再是亂碼了
以上參考了一介村夫 (村長) 以前的帖子
http://bbs.chinaunix.net/viewthread.php?tid=1488504