steve vai中国演出:Linux下Oracle 10g乱码解决方案

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 13:47:30
Linux下Oracle 10g乱码解决方案

我在安装数据库的时候已经选择了UTF8作为数据库字符集,但是在sqlplus和Oracle SQL Developer中插入数据后还是出现乱码情况。后来发现乱码是客户端造成的。

ORACLE有两方面的字符集,一是oracel server端的字符集,二是oracle client端的字符集。只有保证两个字符集一致,并且所选的字符集要能支持中文,才能不出乱码。

1.查看Oracel服务器端的字符集:
select userenv('language') from dual;
我的结果是:
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.AL32UTF8
2.查看Oracle客户端的字符集:
$ echo $NLS_LANG
我出现乱码时显示的结果为空。

后来编辑.bashrc文件,导入NLS_LANG环境变量,将其设置为AMERICAN_AMERICA.AL32UTF8后,注销用户再登录,让环境变量生效后,在用sqlplus时,乱码问题就搞定了。

在linux下若安装oracle没有选择ZHS16GBK,则在处理汉字时会有乱码情况出现。解决方法:
 命令行模式下执行sqlplus "/as sysdba",以sysdba身份进入sqlplus,先执行sql语句:select * from sys.props$,查看NLS_CHARACTER的值,若不是"ZHS16GBK",则可运行sql语句:update sys.props$ set value$='ZHS16GBK' where name='NLS_CHARACTERSET'
 
执行完毕后,停止数据库(sqlplus中使用sysdba登陆,执行shutdown命令),然后启动数据库,启动实例(startup),插入汉字成功。
 
经测试,该种方式由于修改了字符集的系统设置,毕竟是不妥当的(我们后来发现备份表空间失败问题,疑似由此引起),最好的办法还是重新创建数据库,创建时选择字符集为“ZHS16GBK”