技术文档>>数据库技术>>Oracle技术>>oracle错误库>查看文档  
  oracle字符集乱码问题分析及解决办法     
  文章作者:未知  文章来源:IT专家网  
  查看:527次  录入:管理员--2007-11-26  
 
  sql plus worksheet是一个窗口图形界面的sql语句编辑器,对于那些喜欢窗口界面而不喜欢字符界面的用户,该工具相对sql/plus受到了很大的欢迎。但从oracle 8i以后,如果安装oracle 8i时选取的是别于英语的字符集,对于我们中国,通常会选取简体中文字符集(zhs16gbk),安装成功后,运行sql plus worksheet程序,会出现所有的中文显示以及查询结果均为乱码的情况。

  一、问题描述

  sql plus worksheet是一个窗口图形界面的sql语句编辑器,对于那些喜欢窗口界面而不喜欢字符界面的用户,该工具相对sql/plus受到了很大的欢迎。但从oracle 8i以后,如果安装oracle 8i时选取的是别于英语的字符集,对于我们中国,通常会选取简体中文字符集(zhs16gbk),安装成功后,运行sql plus worksheet程序,会出现所有的中文显示以及查询结果均为乱码的情况。

  二、问题分析

  最初出现该问题,首先怀疑就是安装时字符集设置有问题,也就是说没有设置正确的简体中文字符集。首先检查数据库字符集,在sql/plus中,运行下面的sql语句,检查所连接数据库的字符集:

sql> select userenv('language') from dual;
userenv('language')
simplified chinese_china.zhs16gbk

  查询结果发现数据库安装时所选字符集为简体中文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.we8iso8859p1

  去掉注释符#,同时将其修改为

sqlplus_nls_lang=american_america.zhs16gbk

  对于windows操作系统,还需要修改一项,在文件中找到# sqlplus_systemroot=c:\\winnt40,去掉注释符,将其修改为你所在机器的操作系统主目录。如操作系统的主目录在d盘的winnt下,则将其修改为

sqlplus_systemroot=d:\\winnt

  对于后面一项的修改只对windows操作系统进行,对unix操作系统则不需要。如果在windows操作系统中不修改该项,在oracle enterprise manager中,连接系统时,会提示如下的错误:

ora-12560 tns:protocol adapter error

  或者

ora-12545 connect failed because target host or object does not exist

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


  阅读关于 oracle数据库 字符集乱码 问题分析 解决办法 的全部文章
 
 
上一篇: 诊断oracle数据库hanging问题    下一篇: 何时oracle使用绑定变量性能反而更差
  相关文档
包含同名触发器的表purge table出错 11-26
oracle 7.3.4中的ora-03113错误信息 11-26
甲骨文 oracle 11g新版数据库曝出漏洞 11-26
移植oracle8i到带有asm的oracle 10g 11-26
oracle发布了期待已久的etl overhaul 11-26
如何控制oracle 9i自动重新启动问题 11-26
试图连接oracle数据库时出现的ora-12514错误信息 11-26
oracle初学者必知的基础知识 11-26
甲骨文 oracle 11g新版数据库曝出漏洞 11-26
与oracle的谈判 信息决定一切 11-26
百汇健康集团弃sap选oracle 11-26
db2数据库创建存储过程时遇到的错误 11-26
在windows 2000高级服务器上面配置oracle 9i release 2时出现的.. 11-26
案例学习oracle错误:ora-24002 11-26
8i数据迁移到10g出现的问题及解决方法 11-26
oracle常见等待事件说明 11-26
oracle初学者必知的基础知识 11-26
数据库系统紧急故障处理方法(2) 11-26
如何解决ora-04030错误? 11-26
数据库崩溃了!让它恢复正常! 11-26
返回首页 | 关于我们 | J网章程 | JSP空间 | 免责声明 | 常见问题 | JSP空间操作手册

@2005-2012福建JSP技术网 版权所有 闽ICP备09012882号
技术电话:13616026886 谢宁松
邮箱:fjjsp @ vip.163.com 站长QQ,点击这里给我发消息