教你如何成为Oracle 10g OCP - 第二十一章 全球化支持


国家语言支持


Oracle10g提供了100多种语言和30多种字符集。


21.1  字符集

定义 :  字符集指的是对字符进行编码的方案。 对于我们看到的所有字符,比如'A',并不是
直接将A存放在数据文件中,而是将其转换为一组数字,然后将这些数字转换为二进制保存。

最早的编码ASCII : 美国信息交换标准码(American Standard Code for Information Interchange),
方案中每个英文字母和其他特殊字符都指定了相应的一组编码。

在Oracle中出现的最早的字符集是US7ASCII, 用来支持ASCII编码方案,该字符集用单个
字节(Byte)中的7个bit位来描述一个字符(1Byte=8bit),那么总共可以表示的字符是128
个(2的7次方,0和1组成7位),这在美国本土够用,但是在世界其他范围就不够了。

随后Oracle中又出现了8个bit的字符集,也属于单字节字符集,可用字符升级到256个,比如
WE8ISO8859P1, 这是在西欧国家使用的,符合ISO标准的编码。

但是在东欧和一些亚洲国家,还是不够用,比如中国汉字超过55000个,因此Oracle字符集
中又出现了多字节字符集,多字节字符包含两种类型:

1.  固定长度的字节数表示一个字符,10g中支持固定长度的多字节字符集只有1个:AF16UTF16,
主要用于国家字符集。
2.  变化长度的多字节字符集,采用1到3个字节(Byte)来表示一个字符,某些字符比如英文
字母,用一个字节表示, 而其它字符用2个或多个字节表示,变长多字节字符多用来表示亚洲
国家语言,比如中文,日文等,这些字符集包括ZHS16GBK、AL32UTF8 (AL=ALL,表适用所有语言) 。

 


Unicode 编码方案 --

uni=unique , unicode 表示要推广为全世界每一个字符提供唯一的编码的方案,包括UTF-16,
它是unicode的16位编码方案,是固定长度的多字节编码方案,用2个字节,表示一个unicode
字符,在数据库中AF16UTF16就是实现UTF-16编码方案的字符集。

unicode编码方案还包括UTF-8, 是8位编码方案,是一种变化长度的多字节编码方案,可以使
用1到3个字节来表示一个unicode字符。 数据库中AL32UTF8, UTF8就是实现UTF-8编码方案的字
符集。UTF-8又称万国码。 它对英文使用8位(即一个字节),中文使用24为(三个字节)来
编码。

UTF是 Unicode Translation Format;unicode是一种编码方式,和ascii是同一个概念,
而UTF是一种存储方式(格式)。

 

-------------------------------------------

什么是UTF-8?它与UNICODE是一回事吗?

  Unicode的最初目标,是用1个16位的编码来为超过65000字符提供映射。但这还不够,
它不能覆盖全部历史上的文字,也不能解决传输的问题(implantation head-ache's),
尤其在那些基于网络的应用中。已有的软件必须做大量的工作来程序16位的数据。

  因此,Unicode用一些基本的保留字符制定了三套编码方式。它们分别是UTF-8,UTF-16
和UTF-32。正如名字所示,在UTF-8中,字符是以8位序列来编码的,用一个或几个字节
来表示一个字符。这种方式的最大好处,是UTF-8保留了ASCII字符的编码做为它的一部分,
例如,在UTF-8和ASCII中,“A”的编码都是0x41.

  UTF-16和UTF-32分别是Unicode的16位和32位编码方式。考虑到最初的目的,通常说
的Unicode就是指UTF-16。在讨论Unicode时,搞清楚哪种编码方式非常重要。Unicdoe相
关的技术介绍参见http://www.unicode.org/unicode/standard/principles.html.

-------------------------------------------

 

 

21.2  数据库字符集

数据库包括两个字符集: 数据库字符集和国家字符集,都是在创建数据库时指定的,我们
主要使用数据库字符集,国家字符集则是对数据库字符集的补充。有关数据库自带的PL/SQL
程序包以及SQL语句等,都必须以能兼容单字节的编码方式来存放。因此如果数据库中需要
使用固定长度的多字节字符的话,则不能兼容单字节的编码方式。因此为了能支持固定长度
的多字节字符,我们可以将该字符集(固定长度的多字节字符)指定为国家字符集 。


--------------------------------------------------------------
备注:
我们在DBCA创建数据库的时候,一般数据库字符集会选择使用 Unicode (AL32UTF8),
变化长度的多字节编码方案, 这兼容上面讲到的单字节的编码方式; 国家字符集
选择AL16UTF16 - Unicode UTF-16 通用字符集(固定长度的多字节字符) . 
--------------------------------------------------------------

数据库字符集 ---

Oracle 数据库对以下项使用数据库字符集:
A.  以 CHAR 数据类型 (CHAR、VARCHAR2、CLOB 和 LONG) 存储的数据
B.  标识符,如表名、列名和 PL/SQL 变量
C.  输入并存储 SQL 和 PL/SQL 程序源代码


国家字符集  ---

国家字符集是一个备用字符集,利用此字符集可以在没有Unicode 数据库字符集的数据库
中存储 Unicode 字符。选择国家字符集的其它原因如下:
A. 对于频繁的字符处理操作,不同的字符编码方案可能更为理想
B. 使用国家字符集时编程更容易
如果表的列的数据类型定义为NCHAR, NVARCHAR2, NCLOB等,则其中存放的数据使用
国家字符集进行编码。


通过 nls_database_parameters 查看当前数据库字符集和国家字符集。一旦创建了数据库,
就不应该再修改字符集。修改字符集的命令:
SQL> alter database character set  ;
也可以通过 PROPS$ 查看字符集 。

 


21.3  客户端字符集

通过设置环境变量来定义客户端的字符集
NLS_LANG=_.

例子:
C:\> set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
说明语言为简体中文,区域为中国,字符集为ZHS16GBK

视图v$nls_valid_values 里记录了可以为language,territory及客户端字符集所设定的
合法值。

在Windows中可以通过修改注册表来指定客户端的字符集信息。
HKEY_LOCAL_MACHINE\\SOFTWARE\\Oracle\\HOME0
如果在unix或Linux下面可以通过export方式设置:
$export  NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
我们在客户端登陆到数据库后,session相关的语言环境由客户端的nls_lang进行设置。
我们可以通过alter session set 来覆盖nls_lang的设置。


备注: nls_language是服务器端的属性,nls_lang是客户端的属性

 

 

21.4  客户端字符集与服务器端字符集的转换


先了解一下超集和子集的关系: 
http://space.itpub.net/35489/viewspace-676403
显示为"靠","?" 或者 颠倒过来的 "?" 的原因分析:
http://lastwinner.itpub.net/post/7102/45628 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-676406/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-676406/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值