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