pl/sql developer 客户端乱码

select * from v$nls_parameters
查询nls的参数,获得数据库服务器端的字符编码
NLS_LANGUAGE
NLS_CHARACTERSET

右击“我的电脑” 属性-》高级--》环境变量
NLS_LANG = NLS_LANGUAGE.NLS_CHARACTERSET
设入查询的值就可以
引用

查看可选的数据库字符集:
select *  from v$nls_valid_values;

查看当前数据库字符集配置:
Select userenv('language') from dual;或者
select * from v$nls_parameters;
或者:select * from sys.props$


引用


原因:

出现中文乱码的主要原因是字符集不同。

在 Oracle中,我们关心三个地方的字符集:

l Oracle服务器内部的字符集

l NLS_LANG变量里保存的字符集

l 客户端应用的字符集

Oracle服务器内部的字符集

这是 Oracle数据库存储数据使用的字符集。

在 Oracle中可能使用

Select userenv('language') from dual;

查看。



NLS_LANG变量里保存的字符集

这个是 Oracle设置的一个变量。

在 Windows中,这个变量保存在注册表中:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0保存着NLS_LANG变量。



在 Unix/Linux中,则需要自己进行设置了。我本人是在.profile里面加上

NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

export NLS_LANG





客户端应用的字符集

使用 Oracle里数据或者向Oracle提供数据的应用程序。



如果 Oracle 服务器内部的字符集 和 NLS_LANG变量里保存的字符集 相同,在进行Oracle查询时,就会将Oracle中的数据直接查出来,返回给查询用户。进行Oracle的插入操作,就会直接将插入的数据保存进数据库中。

但是如果不同的话,Oracle查询时,会根据这两个字符集的一个映射,将数据库中的数据作一个转换,再返回给查询用户。进行插入操作时,也会根据映射,将插入的数据作一个转换,再插入数据库。这也是产生乱码的原因,这一层转换,把数据都给转乱了。
解决办法:

客户端字符集设置的和数据库端的字符集一样


[Q]怎么样查看数据库字符集
[A]数据库服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集。
  客户端字符集环境select * from nls_instance_parameters,其来源于v$parameter,
表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表
  会话字符集环境 select * from nls_session_parameters,其来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。
  客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,alter session>环境变量>注册表>参数文件
  字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是 American_America.zhs16gbk。

你可能感兴趣的:(oracle,sql,linux,应用服务器,unix)