oracle:編碼問題,中文顯示亂碼,兩個client


 

 

作者:A_zhu

sqlplus 、cmd連數據庫,還是客戶端經過服務器連數據庫。都有編碼的問題。

1。客戶端的編碼

2.會話(session )的編碼

3.例子(instance)的編碼

4.數據庫的編碼

查看方法:

1客戶端:看regedit 中 的nls_lang

2.session :連接數據庫(cmd 方式,同下) select *from nls_session_parameters;

3。instance :連接數據庫select *from nls_instance_parameters;

4.database: 連接數據庫 select*from nls_database_parameters;

 

解決方法:

連接數據庫后,select userenv(‘language’)from dual; 可以查看當前會話的編碼方式。

通過alter session set nls_lang=XXXXXXX 修改session ,再次運行 select userenv(‘language’)from dual;

可以看到會變化,但是這解決不了問題

 

如果有其他電腦可以查看成功,那直接連接數據庫后select userenv(‘language’)from dual; 記為xxxxxxxxx,在自己電腦運行cmd 后,不要馬上連接數據庫,運行set nls_lang=xxxxxxxxxxxxxx; 然后再連數據庫,問題通常會解決。必須要在運行cmd 后和連接數據庫前set 了,試過斷連再改不成功。

這樣每次cmd 連數據庫前都要set 一次。

 

想不這樣可以直接修改regedit中的 nl_lang ;

這里有問題,因為我電腦裝了兩個client, 一個10g ,一個11g ,在oracle 目錄下有一個 nls_lang ,在10g 的目錄下也有一個nls_lang ,但是11g 的是沒有的,發現兩個都改了之后都不成功,這時!

看電腦的環境變量,path ,是11g 的路徑在前還是10g 的路徑在前,把10g 的路徑放到11g 的前面。這就行了。11g有兩個,10g 有1個。

 

另外嘛: instance 是指什么還沒搞懂, 在連接數據庫后 用 alter system set nls_language=‘xxxxxx’ 也能修改成功,好像就是修改instance 的,instance 難道是指本地數據庫的?!暫時不懂。

 

通常下 中文的是 : SIMPLIFIED CHINESE_CHINA.ZHS16GBK

英文是:AMERICAN_AMERICA.ZHS16GBK

有其他編碼。這里就不解釋編碼了。

regedit 中 :

oracle 下的 nls_lang:

10g 下的nls_lang :
 
環境變量 :
G:\database\bin;G:\database\product\11.2.0\client_1;G:\database\product\11.2.0\client_1\bin;
注:前一個是10gclinet, 后兩個是11g的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM