---- 在国内外大中型数据库管理系统中,把oracle作为数据库管理平台的用户比较多。oracle 不论是数据库管理能力还是安全性都是无可非议的,但是,它在汉字信息的显示方面着实给中国用户带来不少麻烦,笔者多年从事oracle数据库管理,经常收到周围用户和外地用户反映有关oracle数据库汉字显示问题的求援信,主要现象是把汉字显示为不可识别的乱码,造成原来大量信息无法使用。本文将就这一问题产生的原因和解决办法进行一些探讨,供存在这方面问题的用户朋友参考。
---- 1、原因分析
---- 通过对用户反映情况的分析,发现字符集的设置不当是影响oracle数据库汉字显示的关键问题。那么字符集是怎么一会事呢?字符集是oracle 为适应不同语言文字显示而设定的。用于汉字显示的字符集主要有zhs16cgb231280,us7ascii,we8iso8859p1等。字符集不仅需在服务器端存在,而且客户端也必须有字符集注册。服务器端,字符集是在安装oracle时指定的,字符集登记信息存储在oracle数据库字典的v$nls_parameters表中;客户端,字符集分两种情况,一种情况是sql.net 2.0以下版本,字符集是在windows的系统目录下的oracle.ini文件中登记的;另一种情况是sql.net 2.0以上(即32位)版本,字符集是在windows的系统注册表中登记的。要在客户端正确显示oracle 数据库汉字信息,首先必须使服务器端的字符集与客户端的字符集一致;其次是加载到oracle数据库的数据字符集必须与服务器指定字符集一致。因此,把用户存在的问题归纳分类,产生汉字显示异常的原因大致有以下几种:
---- 1. 1服务器指定字符集与客户字符集不同,而与加载数据字符集一致。
---- 这种情况是最常见的,只要把客户端的字符集设置正确即可,解决办法见2.1。
---- 1. 2服务器指定字符集与客户字符集相同,与加载数据字符集不一致。
---- 这类问题一般发生在oracle版本升级或重新安装系统时选择了与原来服务器端不同的字符集,而恢复加载的备份数据仍是按原字符集卸出的场合,以及加载从其它使用不同字符集的oracle数据库卸出的数据的情况。这两种情况中,不管服务器端和客户端字符集是否一致都无法显示汉字。解决办法见2.2。
---- 1.3服务器指定字符集与客户字符集不同,与输入数据字符集不一致。
---- 这种情况是在客户端与服务器端字符集不一致时,从客户端输入了汉字信息。输入的这些信息即便是把客户端字符集更改正确,也无法显示汉字。解决办法见2.3。
---- 2.解决办法
---- 下面将分别对上述三种情况给出解决办法。为了叙述方便,假设客户端使用windows95/98环境,并已成功地配置了tcp/ip协议,安装了oracle的sql.net,sql*pluse产品。
---- 2.1 设置客户端字符集与服务器端字符集一致
---- 假设当前服务器端使用us7ascii字符集。
---- (1)查看服务器端字符集
---- 通过客户端或服务器端的sql*plus登录oracle的一个合法用户,执行下列sql语句:
sql > select * from v$nls_parameters
parameter value
nls_language american
nls_territory america
…. ….
nls_characterset us7ascii
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器