浅析Oracle数据库字符集问题

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:qq88493940
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:数据库核心字符集决定了数据在数据库中的存储格式。本文讨论了Oracle数据库核心字符集的设置方法及相关参数,并提出了核心字符集的修改方法。
  关键词:Oracle;字符集
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)17-31198-02
  Discussion on Oracle National Language Support
  TENG Yong-chang
  (Oracle Union University,Beijing 100096,China)
  Abstract:Oracle Database national language support decide store format of data. This paper discuss how to configuration database characterset, and give a update database nls parameters method.
  Key words: Oracle;National Language Support
  
  1 什么是字符集
  
  Oracle是目前最为流行的关系型数据库管理系统,因其在数据安全性与数据完整性控制方面的优越性能,以及跨越操作系统、多硬件平台的数据相互操作等特点,越来越多的用户使用Oracle作为其信息系统管理、企业数据处理、Internet、电子商务网站等领域应用数据的后台处理系统。在使用Oracle数据库时,如果核心字符集设置不正确,则数据显示会出现乱码。那么,到底什么是字符集,我们先看下面的一个例子。
  在上述显示结果中,数据库中的数据存储有中文,但是查询基表product时,该显示中文的地方出现了“?”号,而英文显示是正确的,这是数据库的核心数据显示出现错误(注:后边可以修改这种错误)。这个问题也是我们在实际中容易出现的问题,特别容易出现在数据库的卸出(Export)与导入(Import)时。那么,这是什么原因呢?
  这个问题就是由数据库的字符集问题引起。简单地讲,字符集就是决定数据库所支持的语言标准,也就是说,数据库是支持中文、还是日文、英文等,不决定操作系统平台,而决定于字符集
  
  2 Oracle核心字符集设置
  
  在Oracle数据库中,数据库核心支持什么样的语言,也就是说,数据库本身可以存储、处理哪一种语种,是与操作系统没有关系的,而是与数据库核心字符集的设置是否正确有直接关系的。例如,可以在英文的操作系统中存储中文、在中文操作系统存储日文等。在Oracle中,可以通过设置与字符集有关的参数,改变数据显示格式。下边说明其中一些常用参数的设置方法。
  参数NLS_CALENDAR决定日历系统格式,缺省为 Gregorian。 日期显示格式可以使用修改会话命令进行修改,例如将日历显示格式为Japanese Imperial日本语言格式:
  SQL> alter session set nls_calendar='Japanese Imperial';
  修改完成后,所有日历的显示格式是相同的,都是日本语言格式:
  SQL> select empno,hiredate,deptno,ename from emp
  数据字典nls_database_parameter设置了与存储、处理、检索中文字符有关的参数,该参数为NLS_CHARACTERSET。如果要在数据库中存储中文,则此参数的取值必须为ZHS16CGB231280、或ZHS16GBK中的某一个,否则,数据库中的中文将出现乱码。字符集ZHS16CGB231280从Oracle7.3版开始启用,而字符集ZHS16GBK从Oracle8版开始启用。中文字符集与数据库版本的关系如下表:
  Oracle数据库核心字符集对照表
  A、Oracle客户端字符集设置
  在Oracle中,每个客户端可以有不同的字符集设置。决定客户端字符集类型的是由参数NLS_LANG。其格式如下:
  NLS_LANG = language_territory.charset
  其中,
  Language:表示本国日期中的月、日的描述及书写方向
  Territories:表日历习惯,日期、时间格式,数字
  Character Sets:数据库核心字符集类型
  如:
  NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16CGB231280或
  NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK或
  NLS_LANG = AMERICAN_AMERICA.US7ASCII 或
  NLS_LANG = JAPANESE_JAPAN.JA16EUC
  在Unix中,通过设置环境变量NLS_LANG,可以直接在操作系统中定义字符集类型,方法如下:
  $ NLS_LANG = “simplified chinese”_china.zhs16gbk
  $export NLS_LANG
  在Windows 中,决定客户端字符集的参数NLS_LANG被定义在Windows系统的注册表里。如果要重新定义,可以直接修改注册表。如果要将界面修改为英文,NLS_LANG的取值为:
  American_America.US7ASCII
  B、字符集转换实例
  在Oracle中,一些不同的字符集是允许进行转换的,同时存在多语种字符集的问题,允许在同一数据库中使用不同字符集的语种。下面分别说明几种使用不同字符集数据库的案例。
  案例一、单一字符集数据库系统:
  这种应用系统的结构如图1所示,服务器与客户端的字符集相同,这种字符集的使用是典型的数据库应用类型。当然,这里也允许使用NLS16CGB231280字符集,这两种字符集维持兼容。
  图1 单一字符集数据库
  需要说明的是,数据库核心字符集与服务器操作系统的语种是没有关系的,也就是说,在英文的操作系统中可以存储中文,在中文操作系统的数据库中也可以存储日文,只要将字符集参数设置正确就可以了。
  案例二、单一字符集三层数据库系统结构:
  图2是基于Oracle数据库的三数据库应用层结构。在数据库服务器、以及应用服务器中使用了相同的字符集ZHS16GBK,这是最为理想的状况,服务器之间不存在字符集转换问题。
  图2 单一字符集三层结构
  案例三、不同字符集不可以相互转换:
  对于图3的情况,字符集是不能相互转换的,ZHS16GBK与US7ASCII是截然不同的两种字符集。在字符集ZHS16GBK的数据库中,可以查询到英文,但在US7ASCII字符集的数据库中的中文会出现乱码。
  Oracle8i、Oracle9i支持Unicode 3.0标准,支持Unicode编码的数据库字符集类型有UTF8 、AL32UTF8、以及 UTFE,优先使用UTF8。这样,在同一台服务器中可以存储不同类型语种的语言,读取不同的语言使用不同字符集的客户端即可,这种应用系统特别适用于国际多语种的环境。
  图3 不同字符集不可相互转换
  
  3 修改数据库核心字符集
  
  在实际中,如果数据库核心字符集在安装时选择错误,则必须修改,否则将来汉字的显示会出现乱码。要改变数据库核心字符集,一种方法是重新安装数据库,另外一种方法则是修改字符集。重新安装数据库自然可以,这里不必赘述,下面说明如何修改核心字符集。
  在Oracle8i、Oracle9i中,可以通过修改系统数据字典props$直接修改数据库核心字符集,将参数NLS_CHARACTERSET的列值改为所需要的字符集类型,修改后重新启动数据库即可。例如:
  SQL> update props$
  2> set value$='ZHS16GBK'
  3> where name='NLS_CHARACTERSET';
  在Oracle数据库中,客户端字符集必须与数据库核心字符集类型一致,否则汉字将出现乱码;如果要将早期数据库中的数据移入到Oracle8i、Oracle9i中,由于原始数据字符集问题,新的数据库核心必须使用早期数据库核心字符集类型,客户端也要保持与早期核心字符集一致。这种使用方式不存在字符集转换问题。
  
  参考文献:
  [1]滕永昌.Oracle数据库系统管理(上、下册)[M].北京:清华大学出版社,2003.
  [2]Kevin Loney.Oracle9i DBA手册[M].北京:机械工业出版社,2003.
  注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
其他文献
摘要:Struts为Web应用提供了现成的通用的框架,可以大大提高Web应用的开发速度。首先介绍了MVC设计模式,接着分析了Struts如何实现MVC机制,最后揭示了Struts的不足之处。  关键词:Struts;MVC;设计模式  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)18-31677-02  Struts: the Development of Web
期刊
摘要:随着互联网在社会生活各个领域的广泛应用和商业化的深入发展,现有的网络基础设施和网络服务已经难以满足和支持大规模的网络应用,如交互式远程实时教学、协同科研、数字化图书馆、虚拟实验室等。与此同时,随着网络规模的扩大,现有网络的管理和运营已经变得非常复杂,地址空间匮乏、带宽瓶颈、网络安全、数据保密、服务质量等问题变得越来越突出。本文通过对IPV6的特点、协议体系等核心技术的分析,结合在实际工作中的
期刊
摘要:关联规则挖掘向来是数据挖掘的一个重要领域,挖掘算法也层出不穷。本文在深入分析了FP树特性的基础上,改进了FP树构造过程,通过一次扫描事务数据库生成FP树。缩短了关联规则挖掘时间,提高了效率,实验验证了其有效性。  关键词:数据挖掘;关联规则;FP树  中图分类号:TP311 文献标识码:A文章编号:1009-3044(2007)18-31707-01  An Improved FP-Tree
期刊
摘要:教育城域网是教育信息化建设的重点项目,本文提出了教育城域网中教学资源的异构问题,特别是对遗留资源的异构,并利用XML和Web服务技术,结合J2EE对教学资源异构系统进行设计和实现。  关键词:教育城域网;遗留教学资源库;异构;XML;Web服务  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)18-31754-03  Implementation of Hete
期刊
摘要:在现在各种基于Java的信息系统的设计与实现中,用户权限管理是一个不可缺少的模块。目前通常的设计思想是利用像Acegi这样优秀的开源框架提供描述性的安全保护。这里通过一个用户权限管理系统介绍了利用Spring的面向方面特性使权限管理在基于Spring系统中通用的一种实现方案。  关键词:数据库;Acegi;面向方面编程;切面;角色  中图分类号:TP311文献标识码:A文章编号:1009-3
期刊
摘要:通过实现网上教学平台中教师端对学生在线测试成绩的统计饼图,本文描述了用svg,vml,flash实现动态统计饼图的方法,分析了用SVG+JavaScript,VML+JavaScript,AS实现动态统计饼图的优缺点。  关键词:SVG;VML;AS;JavaScript  中图分类号:TP37 文献标识码:A文章编号:1009-3044(2007)18-31721-02  Comparis
期刊
摘要:Visual Basic程序设计语言(简称VB)是计算机相关专业学生的必修课。本文在总结实践教学经验的基础上,就如何给毕业班这个特殊群体上好VB课程,总结了几种有效的教学方法,尝试以创新精神和实践能力为重点的素质教育,为毕业班的VB教学提供了参考。  关键词:VB;毕业班;教学  中图分类号:G642文献标识码:A文章编号:1009-3044(2007)18-31765-01  Analys
期刊
摘要:本文对C/S、B/S两种软件体系结构进行了分析比较,论述了其在软件开发中的优势和劣势,认为C/S、B/S混合体系结构更适用于大型复杂系统的开发。最后,通过对其在数字化教学系统中的应用,进一步剖析了C/S、B/S混合体系结构的特点,及其在特定领域中的开发模式。  关键词:软件体系结构;CS与BS混合结构;数字化教学系统  中图分类号:TP311文献标识码:A文章编号:1009-3044(200
期刊
摘要:农产品质量安全备受人们关注,随着信息技术的不断成熟,如何利用信息技术提高农产品质量安全成为学术界研究热点。文章从知识管理角度,研究农产品安全知识转移模型,并使用Agent技术构建该模型,尝试为提高农产品质量安全提供一条途径。  关键词:农产品安全知识;知识转移;Agent  中国分类号:TP311文献标识码:A 文章编号:1009-3044(2007)17-31191-02  Researc
期刊
摘要:SAML 是一项基于XML的交换安全性信息的框架,实现Web单点登录和保证Web服务安全性是SAML最重要的用途。本文讨论了SAML实现这两个用途的方法。  关键词:安全断言标记语言;单点登录;Web服务安全  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)17-31247-02  The Research Of Application Of SAML  HU
期刊