oracle中文乱码

原因:

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

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

l Oracle服务器内部的字符集

l NLS_LANG变量里保存的字符集

l 客户端应用的字符集

Oracle服务器内部的字符集

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

在Oracle中可能使用

Select userenv('language') from dual;

或者:

Select name, value$ from props$;

查看。

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查询时,会根据这两个字符集的一个映射,将数据库中的数据作一个转换,再返回给查询用户。进行插入操作时,也会根据映射,将插入的数据作一个转换,再插入数据库。这也是产生乱码的原因,这一层转换,把数据都给转乱了。


你可能感兴趣的:(oracle)