原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明以下出处,否则追究版权法律责任。
深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/45749187
最近对字符集进行了相关的学习,通过查看相关书籍、在网上找找学习视频,在此结合学习笔记对字符集做一次简单总结。
通过一种自问自答的形式,希望可以帮助读者对字符集的知识做一次梳理。
【不耻下问】
字符集,是字符和编码的对应“表”,我们可以把其理解成一张对应表。之所以需要字符集,是由于计算机中只能存储数字,我们想通过计算机获得字符,因此采用了一个手段,让计算机将字符对应成编码存储起来,这样计算机通过查找数字编码就可以找到相应的字符,从而实现显示字符的目的。
1、操作系统有操作系统字符集;
2、oracle有数据库字符集;
3、其它软件本身所带的字符集。
win:chcp
linux下面查看字符集:
[root@bjbank ~]# locale
locale -a//linux所支持的所有字符集
oracle下面查看字符集:
SQL> select * from v$NLS_PARAMETERS;
补充:字符集常识
zh_HK.big5hkscs:大五码:香港用的! unicode: 国家字符集 zh_SG.gbk:国标库 936:windows操作系统下代表中文字符集 补充完毕。
需要存储和显示字符的时候会用到字符集。在一个系统中,例如oracle本身自带有字符集,因此oracle使用本身的字符集。而有些软件是不带字符集的,它们会选择使用操作系统字符集。所以在判断软件使用的字符集是什么的前提下,先确定软件是使用本身自带的字符集还是使用操作系统的字符集。
对于数据库字符集,在数据类型的选择上,如果不存在字符型的数据类型,可以不考虑字符集。但日常的应用系统中,数据库中都会存在如varchar2这样的数据类型,这是一定要用到字符集的。因为这样的字段下用来存储的是字符。如char、varchar2、clob、long这些都是用来存放字符的。char代表定长的,varchar2代表变长的,clob代表大对象,比如说一篇文章,long代表大对象。
另外,数据中字符集还是用来标示诸如表名、列名以及PL/SQL变量等。同时数据库中的字符集也可以用来存储SQL和PL/SQL程序单元等。
除了数据库字符集以外,另外一种是国家字符集。它是用来存储NCHAR、NVARCHAR2、NCLOB等类型数据。也就是如果数据类型为varchar2这类,数据库会选择数据库字符集,如果是NVARCHAR2这类,数据库会选择使用国家字符集。
对于数据库字符集和国家字符集,我们可以直观的看一下。在oracle安装过程中,有两个地方涉及到设置字符集,1、数据库字符集、2、国家字符集。如下图:
实验:查看数据库的字符集?
SQL> select * from nls_database_parameters
数据库字符集:NLS_CHARACTERSET:zhs16gbk:中文字符集
NLS_NCHAR_CHARACTERSET:国家字符集:AL16UTF16
国家字符集是作为数据库字符集的一种补充。
字符集根据存储字符的不同区分出不同的字符集种类,关注字符集时需要留意字符集可以存储哪些字符。
举几个字符集的例子:
1、US7ASCII:只能存储美国人使用的字符。不超过128个。ASC码是用1个字节8位表示格式:US代表语言,7代表七位,ASCII代表编码。
2、zhs16cgb231280:中文字符集(国标),较老的字符集,其中并未存储完全所有中文字符。
3、zhs16gbk:最新的中文字符集。是zhs16cgb231280的超集。但不意味着严格超集(严格超集规定字符编码是相同的才可以叫严格超集)。
4、utf8:属于unicode字符集,unicode字符集是很多国家联合起来制定的标准。用来存储多国语言的字符集。之后推出了utf8,但并未做到unicode那样存储所有国家的字符集。
5、AL32UTF8:属于unicode字符集,比较新的,比utf8范围广的字符集。如果要用unicode字符集就选用AL32UTF8字符集。通常对于数据库字符集会选择AL32UTF8。
6、AF16UTF16:属于unicode字符集,对于国家字符集,一般统一选择“AF16UTF16”。AF16UTF16字符集也是unicode字符集。
如果规划数据库会存储中文字符,国家字符集一般选择“AF16UTF16”。数据库字符集设为“AL32UTF8”或“ZHS16GBK”。但是AL32UTF8字符集中,中文字符所对应的编码会占用更多的空间。也就是说AL32UTF8字符集在性能上会差一些(虽然全,但性能会打折扣,因为会占用更大的空间意味着网络、I/O等会有更大的负载)。因此,我们在数据库字符集上常常选择“ZHS16GBK”。
小结:
(1)、数据库字符集的选择,如果只存中文,选择zhs16gbk,如果是国际跨国企业,选择AL32UTF8字符集;
(2)、国家字符集选择“AF16UTF16”。
SQL> select * from v$NLS_VALID_VALUES;
--可以查看到oracle支持499种字符集
通过以上我们可以知道,oracle支持所有字符集。
比如说oracle公司存在美国员工、中国员工、韩国员工、日本员工,需要存储多国的语言,因此选择unicode字符集。
对于繁体字符集分为香港和台湾两种,香港常使用香港大五码,台湾常使用台湾的字符集。
<Language><bit size><encoding>
<语言><比特位数><编码>
例:ZHS16GBK:中文,16位,国标库字符集
常用字符集,参看问题5。
致谢:
整理字符集知识,部分内容学习,源自甲骨论论坛中oracle开源视频教程,感谢相克军老师分享。
原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明以下出处,否则追究版权法律责任。
深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/45749187
原文地址:http://blog.csdn.net/huangyanlong/article/details/45749187