unixodbc的insert中文亂碼問題的解決方法

問題描述:

達人們,幫忙診斷下是什麼問題

環境: 
服務端: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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章