关于Oracle数据库字符集的选择

如何选择数据库的字符集是一个有争议的话题,字符集本身涉及的范围很广,它与应用程序、客户的本地环境、操作系统、服务器等关系很密切,因此要做出合适的 选择,需要明白这些因素之间的关系。另外对字符集的基本概念,Oracle数据库字符集的一些知识也需要了解。

随着国内的软件产品逐步走向海外,对于多语言的支持已经成为软件的一个基本要求,采用UNICODE标准也逐渐成为通用的设计方案,此时ORACLE数据库的字符集应该如何选择?很多人都有自己的见解,在网上也可以看到很多关于字符集的文章。这些文章有很多精华值得去学习,但是另一方面还存在一些错误,尤其对UNICODE,存在一些概念不清的地方。

数据库字符集的选择并不存在绝对意义上的正确或错误,每种字符集都有它适用的环境。对于我们来说,了解得越多,越能帮助自己做出适当地选择,而且可以采取措施去主动防范或规避可能出现的问题。反之,如果数据库字符集选择不恰当,会给后面的工作带来很多的麻烦,需要花费很多时间和精力去解决问题,有些问题甚至会影响到客户的业务使用。本文希望可以给大家提供一些相对全面的知识,方便大家了解数据库字符集的相关概念,因此有些繁琐,请大家见谅。另外由于个人的局限,有何不妥之处还请大家不吝指正。

下面我们由浅入深,先由概念入手,再给出几种常用的字符集设置建议,对一些可能遇到的问题做出分析,最后给出自己的建议。

1、字符集的一些基本知识

讲到数据库的字符集设置,首先需要对字符集的知识有些了解。以下是字符集的基本知识介绍:由于计算机只能存储使用二进制数据,因此对于一些字符或符号,需要对它们进行编码,用编码后的数值来表示这些字符。对于一组符号的编码集合就是字符集。

字符集有很多种,最初的字符集是ASCII,它用一个字节中的7位来表示128个字符,第8位没有使用。它包括大小写字母、数字0-9、标点符号、非打印字符(换行符、制表符等4个)以及控制字符(退格、响铃等)等。由于ASCII支持的字符很有限,因此随后又出现了很多的编码方案,这些编码方案大部分都是包括了ASCII的,它们只是做了扩展,这些扩展的内容一般各不相同,因此说ASCII是一个比较基本的编码,EBCDIC编码是另一个比较基本的编码,它的部分字符采用了和ASCII不同的编码值,因此两者是不兼容的基本编码方案。采用EBCDIC编码的比较少,目前主要是IBM 的系统采用,如AS400及S390系统,大部分的系统都是基于ASCII编码的。

由于亚洲国家的字符集相对复杂一些,因此一般都使用了两个及以上的字节进行编码的方案。对于简体中文,GB2312码是国家1981年实施的编码标准,通行于大陆。新加坡等地也使用此编码。GBK编码是GB2312码的扩展,是1995年发布的指导性规范,它在字汇一级支持 ISO/IEC 10646-1 和GB 13000-1 的全部中日韩 (CJK) 汉字(20902字)。目前最新的汉字字符集是2000年的GB18030,它是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。目前简体WINDOWS的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,因此GBK还是我们目前最常用的简体中文字符集。

由于编码方案太多且彼此之间不兼容,存在互相之间存在冲突的情况,即对于同一个编码数值,在两种不同的编码方案中代表的是两个不同的字符。这样对于一些WEB应用来说,由于多种语言文字的同时使用及存储,需要采用一种统一的字符集。为此,国际标准化组织(ISO)制定了ISO 10646码表,而Unicode协会制定了Unicode规范,这两个体系刚开始时是独立建立的,在1991年,双方都认识到世界不需要两个不兼容的字符集。于是它们开始合并双方的工作成果,并为创立一个单一编码表而协同工作。从Unicode2.0开始,Unicode项目采用了与ISO 10646-1相同的字库和字码。目前两个项目仍都存在,并独立地公布各自的标准。Unicode协会现在的最新版本是2006年的Unicode 5.0。ISO的最新标准是10646-3:2003。下面简单介绍一下几种常见的编码方式:

UCS(Universal Character Set)是按ISO-10646定义的字符集,有两种最常用编码方式: UCS-2和UCS-4。

UCS-2:使用0-65535之间的数表示一个unicode字符。UCS-2无法表示所有的unicode字符,只能表示其前65536个字符(称为Basic Multilingual Plane,BMP)。我们一般经常使用的UNICODE码就是指这个编码方案。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/cc1e70b3486a8bdb723522ff48089a17.html