一、什麼是oracle字符集
Oracle字符集是一個字節數據的解釋的符號集合,有大小之分,有相互的包容關系。ORACLE 支持國家語言的體系結構允許你使用本地化語言來存儲,處理,檢索數據。它使數據庫工具,錯誤消息,排序次序,日期,時間,貨幣,數字,和日歷自動適應本地化語言和平台。
影響oracle數據庫字符集最重要的參數是NLS_LANG參數。它的格式如下:
NLS_LANG = language_territory.charset
它有三個組成部分(語言、地域和字符集),每個成分控制了NLS子集的特性。其中:
Language 指定服務器消息的語言,territory 指定服務器的日期和數字格式,charset 指定字符集。如:AMERICAN _ AMERICA. ZHS16GBK
從NLS_LANG的組成我們可以看出,真正影響數據庫字符集的其實是第三部分。所以兩個數據庫之間的字符集只要第三部分一樣就可以相互導入導出數據,前面影響的只是提示信息是中文還是英文。
主要有三個
一個是oracle 服務器上的編碼(這個是說數據存到服務器上以什麼格式存放.)
一個是客戶端的編碼,(服務器返回給客戶端的字符編碼格式)
一個是 終端顯示的編碼.這個跟自己的操作系統有關,比如你要是裝個英文版的系統不特別的裝中文字庫,在終端上當然無法顯示字符.這個跟終端的屬性有關.
終端: 在windows中就是 cmd後出來的那個窗口.在linux中就是命令行.
要不出現亂碼就是得這三個字符 形式得一樣活著兼容. 兼容 我不熟悉了.暫不闡述.
服務器上的編碼: 通過下面的命令可以查看這個是安裝oracle的時候指定的.
selelct userenv('language') from dual;
我的電腦顯示的是 SIMPLIFIED CHINESE_CHINA.AL32UTF8
為了你顯示中文也可以 設置成gbk SIMPLIFIED CHINESE_CHINA.ZHS16GBK
如果說需要改服務器的編碼可以通過這個命令不過 小心使用,因為如果你以前的數據庫,使用的是別的編碼,於是在編碼轉換過程中有可能會出現數據丟失和錯誤.所以重要的數據一定先備份.
運行—— cmd
c: sqlplus / as sysdba
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter system enable restricted session;
SQL> alter system set job_queue_processes=0;
SQL> alter database open;
SQL> alter database character set internal_use AL32UTF8;
SQL> shutdown immediate;
SQL> startup客戶端編碼:
如果是在windows下面可以到注冊表中直接修改
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ 尋找這個 NLS_LANG的值
讓他改為跟 服務器的一樣. SIMPLIFIED CHINESE_CHINA.AL32UTF8
或者 SIMPLIFIED CHINESE_CHINA.ZHS16GBK
在unix平台下,就是環境變量NLS_LANG。
$echo $NLS_LANG
第三個終端顯示
如果數據庫字符集和sqlplus的字符集一致, 還是不能正確顯示了, 那很可能就是你的終端應用程序的字符集不支持了. 例如你用bash登陸sqlplus, 如果你的bash是個小字符集, 那麼就不能正常顯示了.linux修改bash的字符集, 可以先鍵入locale, 看有哪些環境變量, 再用export設置.
windows中在控制台中,右鍵-> 默認值裡面有個設置語言的.