一般情況下我們用的Oracle編碼是UTF-8的
首先我們使用的客戶端securityCRT設置了字符編碼 是utf8,即使Sqlplus查詢正確並返回相應UTF-8格式的值也是不能正確顯示滴.
export LANG=zh_CN.UTF-8 (登陸時前臺的編碼問題)
LANG變量是language的簡稱,這個變量是決定系統的默認語言的,即系統的菜單、程序的工具欄語言、輸入法默認語言等。
LANG變量清空,由於英語是無論什麼情況都支持的,LANG變量被清空後,系統就默認用英語。這樣設置後,在字符模式下輸出的出錯信息等就是全英文的了。但這種設置是臨時的,只是臨時改變了LANG這個bash變量而已。當退出重新登錄或者切換到其他字符終端後就無效了。
export NLS_LANG=AMERICAN_AMERICA.UTF8 (解決sqlplus中 oracle中前臺編碼問題)
“NLS_LANG和數據庫的字符集一樣或許是正確的,但是經常是不對的。不要認爲NLS_LANG必須和數據庫的字符集一樣,這經常是錯的。” 《循序漸進Oracle》中說NLS_LANG一樣的話可以提高性能,因爲不需要字符集的轉換。其實這樣的轉換不時發生在Server端,Client端 轉換完成後傳遞給Server端。我覺得,只要NLS_LANG是Server的字符集的子集就可以。
“NLS_LANG的字符集設置不會更改Client端的字符集。它只是用來告訴Oracle你在Client端使用什麼字符集,你不能通過設置NLS_LANG去影響Client的字符集”。而且如果Client端的字符集和NLS_LANG不兼容,會導致數據庫亂碼。
“如果你不在Client端設置NLS_LANG,那麼默認會使用Server的NLS_LANG設置,這是錯的。如果Oracle在安裝時沒有 設置NLS_LANG,那麼NLS_LANG不會另外再設置,而是使用默認值:AMERICAN_AMERICA.US7ASCII。語言是 AMERICAN,區域是AMERICA,字符集US7ASCII”
“設置NLS_LANG的LANGUAGE 和 TERRITORY部分不會影響存儲在數據庫的字符。將NLS_LANG設置爲JAPANESE_JAPAN.WE8MSWIN1252不會允許你存儲日 文。因爲WE8MSWIN1252字符集不支持日文。但是設置成AMERICAN_AMERICA.JA16SJIS會允許你存儲日文,假設你輸入的字符 是JA16SJIS,並且數據庫的字符集也支持日文(如UTF8或者JA16SJIS)”
轉自:http://www.cnblogs.com/dongzhiquan/archive/2012/06/26/2564134.html