作者: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 中 :

