日期:2013-11-16  浏览次数:20499 次


 
 原文发表于itpub技术丛书《Oracle数据库DBA专题技术精粹》,未经答应,严禁转载本文.
原文链接:

http://www.eygle.com/special/NLS_CHARACTER_SET_01.htm

Oracle全球支持(即Globalization Support)允许我们使用本地言语和格式来存储和检索数据。通过全球支持,Oracle可以支持多种言语及字符集,得以展现数据库的强大魅力。
由于不同言语及字符集的共同存储存在设置上具有一定的复杂性,字符集一度成为普遍困扰大家的一个次要问题。
本文试图就一些常见问题进行探讨,希望可以把一些实际经验共享给大家!

1. 字符集的基本知识
如果从头说起,字符集最早的编码方案来自于与ASCII.
这也是我们最常见的编码方式。该方案起源于1960年代初期,最后是美国国会图书馆制定用来作为美国图书馆界书目交换的共同标准,最后完善成为美国的国家标准ASCII(American Standard Codefor Information Interchange),之后进一步演化成世界性的计算机字符编码标准ISO646(其全名为7-bit coded character set for information interchange)。成为计算机编码方案的基础。
Oracle数据库最早支持的编码方案也就是US7ASCII.
但是我们知道,英文字符普通是以一个字节来存储的,7位的编码方案最多只能代表128个字符;经过扩展的8位的编码方案也只能代表256个字符,这远远不能满足计算机发展的需求,对于亚洲国家复杂的字符存储需求更多的码位,于是各种编码方案随之而生。

为了容纳全世界各种言语的所有字符和符号,处理不同编码之间的兼容和转换问题,1991年元月,10多家公司共同出资,组建Unicode协会,随后Unicode编码产生了。
Unicode协会的口号是: 给每个字符提供了一个独一的数字,不论是什么平台,不论是什么程序,不论什么言语。
最后Unicode编码使用2-Byte(16bit)来进行编码,但是最多只能容纳65536个字符,仍然不够使用,后来进行了扩充,也就是Unicode3.1标准,添加了额外的补充字符定义,如今Unicode4.0标准曾经发布,具体可以参考Unicode官方站点:

www.unicode.org


Unicode编码方案次要有三个实施标准:
UTF-8
USC-2
UTF-16
Oracle从7.2开始支持UTF-8编码,提供Unicode编码支持。

按照各种标准的含义,Oracle推荐,如果你的数据库需求存放不同言语的不同符号和字符,建议使用Unicode编码方案。诚然,Unicode方案可以表示更多的字符,但是由于多位的存储,需求额外的存储空间和网络传输,所以选择最适合的数据库字符集仍然需求慎重考虑。