刚到新公司,需要搭建环境(win7+oracle 11g (client端)),安装完毕plsql,测试了一下,在结果集中,中文显示成了“?”,这不是我想要的结果,所以解决它。
说说产生这个问题的原理吧(个人推测):实际上这个乱码问题与web开发出现乱码问题是一致的,即:编码时与解码时采用的方式不一致,oracle保存数据编码方式是数据库创建时决定的;plsql解码是需要靠系统的环境变量的。如果这两个不一致,必然会产生乱码,你说是不是呢?
说道这里解决方案也就出来了:要么改数据库的编码,要么改环境变量。这个就要看情况了,如果数据库不允许修改,则只能修改环境变量,下面说说如何查看数据库编码和环境变量的解码方式。
oracle编码方式查询:
select * from v$nls_parameters a WHERE a.PARAMETER='NLS_CHARACTERSET';
1 NLS_CHARACTERSET WE8ISO8859P1
环境变量解码方式查询:
我的电脑-》右键-》属性-》高级系统设置-》高级-》环境变量-》系统变量-》变量(列)-》看下有没有叫做“NLS_LANG”的,有的话,看下值是啥,因为我没有配置过,所以我这没有,但是应该是这样的:
NLS_LANG:AMERICAN_AMERICA.WE8ISO8859P1
我的情况是这样的,我的数据库编码是:WE8ISO8859P1,这个数据库不是我本地的所以我不能修改数据库编码,我只能修改环境变量。于是我把“NLS_LANG”的值改成了“AMERICAN_AMERICA.WE8ISO8859P1”,搞定了。
其实网上还有人说要改注册表,但是我没有修改,而且我发现我注册表中根本没有oracle的项。
好了就说到这把。