网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.redhat 8.0下的vsftp的配置.
.AIX4.3.3上安装ORACLE9.2过程详解.
.中软linux券商管理办公系统解决方.
.Oracle Lite 10g数据库第三版正式.
.Oracle数据库几种启动方式.
.Oracle数据库常见错误操作及解决.
.ORACLE数据库PROC编程经验介绍.
.Oracle数据库技术(1).
.ORACLE中生成流水号.
.关于shared pool的深入探讨(6).
.Oracle数据库数据锁定机制全面解.
.局域网通过LINUX主机上网手记.
.Statspack使用存在的几个误区.
.Oracle Application Serve.
.解决Oracle 10g library内存分配.
.Oracle预定义角色.
.Oracle弥补9i数据库的两个漏洞.
.利用 Oracle 10g 技能学习 DB2 9.
.让数据库“安居”到Linux上.
.ORACLE里取随机数的方法.

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

发表日期:2008-2-9



  一、问题描述

  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 数据表分区的策略 人气:633
下一篇:Oracle中使用PL/SQL操作COM对象 人气:677
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐