一般情況下我們用的Oracle編碼是UTF-8的
首先我們使用的用戶端securityCRT設定了字元編碼 是utf8,即使Sqlplus查詢正確並返回相應UTF-8格式的值也是不能正確顯示滴.
export LANG=zh_CN.UTF-8
(登陸時前台的編碼問題)
LANG變數是language的簡稱,這個變數是決定系統的預設語言的,即系統的菜單、程式的工具列語言、IME預設語言等。
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)”