当前位置: 首页 > 图文教程 > 数据库 > Oracle > Oracle 8i字符集乱码问题析及其解决办法

Oracle
常见的一些Oracle初学者的问题
ORACLE认证系统概述
数据库考试简介:Oracle认证
Oracle认证基础知识介绍
ADO连接Oracle Access示例及记录集处理源码
SQL Server和MySQL的安全性分析
用Oracle和SQL Server数据库组合利弊分析
Oracle 11g分区功能新革命
Flashback Query 恢复误删除的数据
基于Oracle高性能动态SQL程序开发
怎样在Oracle 9i中正确的转换时区
Oracle 10g导出的数据库能否导入Oracle 9i?
增加Distinct后查询效率反而提高
Oracle限制返回结果集的大小
Java语言数据库操作的基本流程
美国甲骨文(ORACLE)公司入驻渝中区大都会商厦
RHEL AS4上安装oracle 10R2 的方法
DB中如何查询Table占用空间的大小
编写高质量高性能的MySQL语法
Oracle数据库自动备份的具体实现步骤

Oracle 8i字符集乱码问题析及其解决办法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 93 ::
收藏到网摘: n/a

正在看的ORACLE教程是:Oracle 8i字符集乱码问题析及其解决办法。一、问题描述
  SQL Plus WorkSheet是一个窗口图形界面的SQL语句编辑器,对于那些喜欢窗口界面而不喜欢字符界面的用户,该工具相对SQL/PLUS受到了很大的欢迎。但从Oracle 8i以后,如果安装Oracle 8i时选取的是别于英语的字符集,对于我们中国,通常会选取简体中文字符集(ZHS16GBK),安装成功后,运行SQL Plus WorkSheet程序,会出现所有的中文显示以及查询结果均为乱码的情况。
  二、问题分析
  最初出现该问题,首先怀疑就是安装时字符集设置有问题,也就是说没有设置正确的简体中文字符集。首先检查数据库字符集,在SQL/PLUS中,运行下面的SQL语句,检查所连接数据库的字符集:

  查询结果发现数据库安装时所选字符集为简体中文ZHS16GBK,说明安装时字符集设置完全正确。第二步开始怀疑是用户客户端字符集问题,检查客户端注册表,打开注册表编辑程序(RegEdit),在HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/NLS_LANG,发现Oracle客户端字符集为AMERICAN_AMERICA.ZHS16GBK,设置也完全正确,可以排除是客户端字符集设置错误的问题。同时还有一个现象就是在同一个客户端机器上SQL/PLUS中的查询字符集显示完全正常,这也说明不是字符集设置问题,而是系统程序SQL/Plus Worksheet的问题。
  在Oracle 8i以前的版本中,从来没有出现过这样的情况,这应该和Oracle版本有关,我们知道Oracle 8i和它前面的版本一个显著的区别就是大部分的Oracle系统程序,现在均采用Java驱动,其实这也就是产生字符集乱码问题的根本所在。非Java驱动的程序,如SQL*Plus,有一个系统参数NLS_LANG,该参数在UNIX系统中设置在环境变量中,在Windows操作系统中设置在注册表中,这个参数决定了客户端应用程序的字符集。而对于基于Java应用的程序,如现在遇到的SQL*PLus Worksheet,NLS_LANG参数对这类程序是不起任何作用的。
  三、解决方案
  找到了问题产生的原因后,下面来讨论如何解决该问题。对于Oracle Enterprise Manager中的所有工具,有一个配置文件名为dbappscfg.properties,修改该文件即可解决上述问题。这个文件的位置在$ORACLE_HOME\sysman\config目录下,用任何的文本编辑器打开该文件,在这个文件里面,找到这样一项,

  去掉注释符#,同时将其修改为SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK。
  对于Windows操作系统,还需要修改一项,在文件中找到# SQLPLUS_SYSTEMROOT=c:\\WINNT40,去掉注释符,将其修改为你所在机器的操作系统主目录。如操作系统的主目录在D盘的Winnt下,则将其修改为 SQLPLUS_SYSTEMROOT=d:\\WINNT。
  对于后面一项的修改只对Windows操作系统进行,对UNIX操作系统则不需要。如果在Windows操作系统中不修改该项,在Oracle Enterprise Manager中,连接系统时,会提示如下的错误:

  或者

  修改完成后,保存文件,退出编辑。重新连接SQL PLUS Worksheet,字符集乱码问题得到解决,显示正确的简体中文字符集。