Oracle 8i在更新中包含varchar2和date类型的相关记录时varchar2会出现乱码问题,虽然Oracle 8i以前就被人使用,现在用的人并不占多数,但是毕竟还是有一部分的人在用的,比如遇到乱码等相关问题的介绍。
问题描述:
环境:windows XP,Oracle 8i 8.1.6.0.0
问题:使用JDBC连接数据库,在同时更新一个包含varchar2和date类型的记录时,某个varchar2会出现乱码,无论英文还是中文,并且还有可能同一个字段前半部分乱码后半部分不乱码。同样的sql语句,使用sqlplus执行就没有问题。
问题解决:
首先,用DBA的权限执行下面的语句:
select tab1.aa||’_’||tab2.bb||’.’||tab3.cc from (select VALUE$ aa from sys.props$ where name=’NLS_LANGUAGE’)tab1,(select VALUE$ bb from sys.props$ where name=’NLS_ISO_CURRENCY’)tab2,(select VALUE$ cc from sys.props$ where name=’NLS_CHARACTERSET’)tab3
在Oracle 8i运行中要更新复制上面语句的执行结果,在我的机器上执行的结果是:AMERICAN_AMERICA.ZHS16GBK打开注册表,找到HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0,找到NLS_LANG,双击,将数值数据改为刚复制的那个
修改完注册表,重启机器。在这里可能有一些问题,首先如果你的ORACLE不是一次安装成功的,那么可能有HOME0,HOME1等,在我的经历中,首先将HOME1中的NLS_LANG改了,但是问题依旧,然后将HOME0中改了,问题才解决,所以改的时候把所有的HOMEX中NLS_LANG的都改了吧,如果没有就新建一个。
其次,单改注册表可能还会出现问题,这时候就要改jdbc驱动了,不要用那些10g,9i,8i通吃的驱动,去oracle安装目录中的jdbc目录找,用这里的驱动问题解决。