lanlanxing 发表于 2011-1-19 11:22:24

迭代方式讲解——掌握字符集方面的基本概念

经常看到一些朋友问ORACLE字符集方面的问题,我想以迭代的方式来介绍一下。
第一次迭代:掌握字符集方面的基本概念。
有些朋友可能会认为这是多此一举,但实际上正是由于对相关基本概念把握不清,才导致了诸多问题和疑问。
首先是字符集的概念。
我们知道,电子计算机最初是用来进行科学计算的(所以叫做计算机),但随着技术的发展,
还需要计算机进行其它方面的应用处理。这就要求计算机不仅能处理数值,还能处理诸如文字、特殊符号等其它信息,
而计算机本身能直接处理的只有数值信息,所以就要求对这些文字、符号信息进行数值编码,最初的字符集是我
们都非常熟悉的ASCII,它是用7个二进制位来表示128个字符,而后来随着不同国家、组织的需要,出现了许许多
多的字符集,如表示西欧字符的ISO8859系列的字符集,表示汉字的GB2312-80、GBK等字符集。
字符集的实质就是对一组特定的符号,分别赋予不同的数值编码,以便于计算机的处理。
字符集之间的转换。字符集多了,就会带来一个问题,比如一个字符,在某一字符集中被编码为一个数值,
而在另一个字符集中被编码为另一个数值,比如我来创造两个字符集demo_charset1与demo_charset2,在demo_charset1中,
我规定了三个符号的编码为:A(0001),B(0010),?(1111);而在demo_charset2中,我也规定了三个
符号的编码为:A(1001),C(1011),?(1111),这时我接到一个任务,要编写一个程序,负责
在demo_charset1与demo_charset2之间进行转换。由于知道两个字符集的编码规则,对于demo_charset1中的0001,
在转换为demo_charset2时,要将其编码改为1001;对于demo_charset1中的1111,转换为demo_charset2时,
其数值不变;而对于demo_charset1中的0010,其对应的字符为B,但在demo_charset2没有对应的字符,
所以从理论上无法转换,对于所有这类无法转换的情况,我们可以将它们统一转换为目标字符集中的一个特殊字符
(称为替换字符),比如在这里我们可以将?作为替换字符,所以B就转换为了?,
出现了信息的丢失;同样道理,将demo_charset2的C字符转换到demo_charset1时,也会出现信息丢失。
--------------------------------------------------------------------------------------------------
服务器机房信息介绍
香港服务器租用 各大机房信息
九仓电讯机房成立于1995年,最大的香港固网电信公司之一,拥有着稳定与先进的海底电缆与全球各基础线路商高速联接。
美国服务器租用香港服务器租用 - 香港九仓电讯线路租用介绍
处理器/频率(CPU) 内存 硬盘 带宽/月流量 IP数 月付价格
Atom 230 1.6Ghz (超线程)1GB80GB2M独享国际带宽1800元/月
奔腾双核 E2160 1.8Ghz 1GB80GB2M独享国际带宽1900元/月
奔腾双核 E5200 2.5Ghz 2GB160GB2M独享国际带宽11100元/月
四核至强 X3220 2.4Ghz 4GB160GB2M独享国际带宽12100元/月
美国服务器租用- 香港和记电讯线路-租用介绍
处理器/频率(CPU) 内存 硬盘 带宽/月流量 IP数 月付价格
Atom 230 1.6Ghz (超线程)1GB80GB2M独享国际带宽1800元/月
奔腾双核 E2160 1.8Ghz 1GB80GB2M独享国际带宽1900元/月
奔腾双核 E5200 2.5Ghz 2GB160GB2M独享国际带宽11100元/月
四核至强 X3220 2.4Ghz 4GB160GB2M独享国际带宽12100元/月
香港服务器租用- 香港NTT/HKNET线路 租用介绍
NTT机房是香港最大型最稳定的数据中心,自从2000年收购HKNET旗下起,
NTT在香港电讯服务上即占据领先地位。NTT/HKNET是目前香港到中国大陆速度最快、最稳定的线路之一。
处理器/频率(CPU) 内存 硬盘 带宽/月流量 IP数 月付价格
酷睿双核 E7400 2.80Ghz 2GB160GB2M独享国际带宽51280元/月
酷睿四核 Q8200 2.33Ghz 4GB160GB2M独享国际带宽51600元/月
四核至强 E5405 2.0Ghz 4GB500GB2M独享国际带宽52980元/月
双CPU * 四核至强 E5405 2.0Ghz4GB2* 146G SAS2M独享国际带宽53380元/月
USA-IDC香港服务器租用商五洲数据提供国外服务器租用美国服务器租用业务
在客服评价中国的网络环境最好的运营商莫过于USA-IDC拥有国际领先的ALINK网络 优化技术,
如果说国内哪个机房网络环境最好,回答是USA-IDC!要问哪个机房网络低峰与高峰期差距 最小!
回答依然是USA-IDC!同时USA-IDC的机房网络环境在国际互通方面也是国内最好的!
在国际方面的突出表现也是有目共睹的!好不好提供测试ip让您可以去测试一下
-------------------------------------------------------------
所以说,在字符集转换过程中,如果源字符集中的某个字符在目标字符集中没有定义,将会出现信息丢失。
数据库字符集的选择。
我们在创建数据库时,需要考虑的一个问题就是选择什么字符集与国家字符集(通过create database中
的CHARACTER SET与NATIONAL CHARACTER SET子句指定)。考虑这个问题,我们必须要清楚数据库中都需要
存储什么数据,如果只需要存储英文信息,那么选择US7ASCII作为字符集就可以;但是如果要存储中文,
那么我们就需要选择能够支持中文的字符集(如ZHS16GBK);如果需要存储多国语言文字,那就要选择UTF8了。
数据库字符集的确定,实际上说明这个数据库所能处理的字符的集合及其编码方式,由于字符集选定后再
进行更改会有诸多的限制,所以在数据库创建时一定要考虑清楚后再选择。
而我们许多朋友在创建数据库时,不考虑清楚,往往选择一个默认的字符集,如WE8ISO8859P1或US7ASCII,
而这两个字符集都没有汉字编码,所以用这种字符集存储汉字信息从原则上说就是错误的。虽然在有些时
候选用这种字符集好象也能正常使用,但它会给数据库的使用与维护带来一系列的麻烦,在后面的迭代过程中我们将深入分析。
客户端的字符集。
有过一些Oracle使用经验的朋友,大多会知道通过NLS_LANG来设置客户端的情况,NLS_LANG由以下部分组成:
NLS_LANG=_.,其中第三部分的本意就是用来指明客户端操作系统缺省使用的字符集。所以按正规的用法,
NLS_LANG应该按照客户端机器的实际情况进行配置,尤其对于字符集一项更是如此,这样Oracle就能够在
最大程度上实现数据库字符集与客户端字符集的自动转换(当然是如果需要转换的话)。

--------------------------------------------------------------------------------------------------------
四,服务器运营商信息简介
USA-IDC美国服务器租用商五洲数据提供美国服务器租用国外服务器租用业务
USA-IDC海外数据中心 2005~2010 深圳市网格时代科技有限公司 保留所有权利.
http://www.usa-idc.com
http://www.755800.com
页: [1]
查看完整版本: 迭代方式讲解——掌握字符集方面的基本概念