DBA字符集管理(一)

原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明以下出处,否则追究版权法律责任。

深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/45749187

 

        最近对字符集进行了相关的学习,通过查看相关书籍、在网上找找学习视频,在此结合学习笔记对字符集做一次简单总结。

 通过一种自问自答的形式,希望可以帮助读者对字符集的知识做一次梳理。

【不耻下问】

问题1:字符集的概念?

        字符集,是字符和编码的对应“表”,我们可以把其理解成一张对应表。之所以需要字符集,是由于计算机中只能存储数字,我们想通过计算机获得字符,因此采用了一个手段,让计算机将字符对应成编码存储起来,这样计算机通过查找数字编码就可以找到相应的字符,从而实现显示字符的目的。

技术分享

问题2:在IT系统体系中,哪些结构是存在字符集的?

1、操作系统有操作系统字符集;

2oracle有数据库字符集;

3、其它软件本身所带的字符集。

问题3:查看字符集的命令?

winchcp

技术分享

linux下面查看字符集:

[root@bjbank ~]# locale

技术分享

locale -a//linux所支持的所有字符集

oracle下面查看字符集:

SQL> select * from v$NLS_PARAMETERS;

技术分享

 

补充:字符集常识

zh_HK.big5hkscs:大五码:香港用的!
unicode: 国家字符集
zh_SG.gbk:国标库
936:windows操作系统下代表中文字符集
补充完毕。

问题4:字符集的使用情况?

        需要存储和显示字符的时候会用到字符集。在一个系统中,例如oracle本身自带有字符集,因此oracle使用本身的字符集。而有些软件是不带字符集的,它们会选择使用操作系统字符集。所以在判断软件使用的字符集是什么的前提下,先确定软件是使用本身自带的字符集还是使用操作系统的字符集。

        对于数据库字符集,在数据类型的选择上,如果不存在字符型的数据类型,可以不考虑字符集。但日常的应用系统中,数据库中都会存在如varchar2这样的数据类型,这是一定要用到字符集的。因为这样的字段下用来存储的是字符。如charvarchar2cloblong这些都是用来存放字符的。char代表定长的,varchar2代表变长的,clob代表大对象,比如说一篇文章,long代表大对象。

        另外,数据中字符集还是用来标示诸如表名、列名以及PL/SQL变量等。同时数据库中的字符集也可以用来存储SQLPL/SQL程序单元等。

         除了数据库字符集以外,另外一种是国家字符集。它是用来存储NCHARNVARCHAR2NCLOB等类型数据。也就是如果数据类型为varchar2这类,数据库会选择数据库字符集,如果是NVARCHAR2这类,数据库会选择使用国家字符集。

        对于数据库字符集和国家字符集,我们可以直观的看一下。在oracle安装过程中,有两个地方涉及到设置字符集,1、数据库字符集、2、国家字符集。如下图:

技术分享

实验:查看数据库的字符集?

SQL>  select * from nls_database_parameters

技术分享

数据库字符集:NLS_CHARACTERSET:zhs16gbk中文字符集

NLS_NCHAR_CHARACTERSET:国家字符集:AL16UTF16

国家字符集是作为数据库字符集的一种补充。

问题5:字符集的命名?

字符集根据存储字符的不同区分出不同的字符集种类,关注字符集时需要留意字符集可以存储哪些字符。

举几个字符集的例子:

1US7ASCII:只能存储美国人使用的字符。不超过128个。ASC码是用1个字节8位表示格式:US代表语言,7代表七位,ASCII代表编码。

2zhs16cgb231280:中文字符集(国标),较老的字符集,其中并未存储完全所有中文字符。

3zhs16gbk:最新的中文字符集。是zhs16cgb231280的超集。但不意味着严格超集(严格超集规定字符编码是相同的才可以叫严格超集)。

4utf8:属于unicode字符集,unicode字符集是很多国家联合起来制定的标准。用来存储多国语言的字符集。之后推出了utf8,但并未做到unicode那样存储所有国家的字符集。

5AL32UTF8:属于unicode字符集,比较新的,比utf8范围广的字符集。如果要用unicode字符集就选用AL32UTF8字符集。通常对于数据库字符集会选择AL32UTF8

6AF16UTF16:属于unicode字符集,对于国家字符集,一般统一选择“AF16UTF16”。AF16UTF16字符集也是unicode字符集。

如果规划数据库会存储中文字符,国家字符集一般选择“AF16UTF16”。数据库字符集设为“AL32UTF8”或“ZHS16GBK”。但是AL32UTF8字符集中,中文字符所对应的编码会占用更多的空间。也就是说AL32UTF8字符集在性能上会差一些(虽然全,但性能会打折扣,因为会占用更大的空间意味着网络、I/O等会有更大的负载)。因此,我们在数据库字符集上常常选择“ZHS16GBK”。

小结:

1)、数据库字符集的选择,如果只存中文,选择zhs16gbk,如果是国际跨国企业,选择AL32UTF8字符集;

2)、国家字符集选择“AF16UTF16”。

问题6:如何查看我们可以选择的字符集有哪些?

SQL> select * from v$NLS_VALID_VALUES;

--可以查看到oracle支持499种字符集

技术分享 

通过以上我们可以知道,oracle支持所有字符集。

问题7:对于跨国企业,需要选择怎样的字符集?

比如说oracle公司存在美国员工、中国员工、韩国员工、日本员工,需要存储多国的语言,因此选择unicode字符集。

问题8:对于繁体字符集选择应该注意哪些?

对于繁体字符集分为香港和台湾两种,香港常使用香港大五码,台湾常使用台湾的字符集。 

问题9:字符集命名规则?

<Language><bit size><encoding>

<语言><比特位数><编码>

例:ZHS16GBK:中文,16位,国标库字符集

常用字符集,参看问题5

 

致谢:

整理字符集知识,部分内容学习,源自甲骨论论坛中oracle开源视频教程,感谢相克军老师分享。

 

原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明以下出处,否则追究版权法律责任。

深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/45749187 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。