linux 下oracle 10g sqlplus中文顯示和輸入的問題

一般情況下我們用的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

發佈了23 篇原創文章 · 獲贊 13 · 訪問量 44萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章