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的。
posted @ 2012-04-03 17:24  A_zhu  阅读(4037)  评论(0编辑  收藏  举报