一、字符集的概念
字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。
个人觉得,谈到字符集,更侧重这个集合里有什么样的内容(如包含多少中文,包含多少日文等)。
二、字符编码的概念
字符集中的字符,在计算机中应该怎样表示,如GB2312字符集中的"天"字,在计算机中表示为0x1601。因此,谈到字符编码,更侧重于一个映射的过程和规则。
这里提一下Unicode字符集:
Unicode字符集编码是Universal Multiple-Octet Coded Character Set 通用多八位编码字符集的简称,是由一个名为 Unicode 学术学会(Unicode Consortium)的机构制订的字符编码系统,支持现今世界各种不同语言的书面文本的交换、处理及显示。
Unicode是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
UTF 是unicode的传送码,即unicode编码后的编码。简单理解, UTF-8,是对unicode字符集的一种编码方案。UTF-8使用可变长度字节来储存 Unicode字符,例如ASCII字母继续使用1字节储存,重音文字、希腊字母或西里尔字母等使用2字节来储存,而常用的汉字就要使用3字节。辅助平面字符则使用4字节。
同理,UTF-16,UTF-32是UTF-8的兄弟。
三、代码页 code pade
DB2中采用代码方式指定字符集,如代码页1208,指示UTF-8编码的unicode字符集,1383,指示GBK字符集。 因此,可以简单将db2的代码页看成是一种字符集,但又不是严格的字符集,纯属个人见解。
代码页 code page 是IBM 的传统术语,就是“一张字符编码表”,当然这个“张”可以很大也 可以很小。例如 IBM PC (OEM) code page,中文GBK code page 。
Code page is the traditional IBM term used for a specific character encoding table: a mapping in which a sequence of bits, usually a single octet representing integer values 0 through 255, is associated with a specific character. IBM and Microsoft often allocate a code page number to a character set even if that charset is better known by another name.
代码页是字符“代码”和数据库中它的二进制“编码”(表示)间的映射。因此,代码页和所有的DB2字符数据类型(CHAR,VARCHAR,CLOB,DBCLOB)相关。在执行CREATE DATABASE命令期间,在数据库级设置代码页。
一个DB2数据库只能够使用单一的代码页。在执行带 CODESET 和 TERRITORY 选项的CREATE DATABASE命令期间,就创建了代码页。
代码点是在代码页中字符的位置。如果应用程序和数据库没有用相同的代码页定义,DB2将尝试转换代码页。
注意:二进制数据,如FOR BIT DATA列和BLOB列,和数据库代码页无关,不需要字符转换。
当一个DB2应用程序绑定到一个DB2数据库时,会比较应用程序和数据库的代码页。如果两者不同,则每条SQL语句都会试图转换代码页。如果用户使用的代码页不同于所访问的数据库的代码页,重要的是确保两者是兼容的,可实现转换。
默认的情况下,数据库的排列顺序(collating sequence)根据CREATE DATABASE命令所使用的代码集定义。如果指定COLLATE USING SYSTEM选项,则数据值将按照为数据库指定的TERRITORY进行比较。如果使用COLLATE USING IDENTITY选项,则所有的值都以二进制的形式逐字节地进行比较。
如果需要以原始格式(二进制)存储数据,要避免使用与代码页相关的数据类型。一般来说,最好使应用程序和数据库使用相同的代码页,以避免代码页的转换过程。
四、db2的3层次代码页设定
在DB2数据库中,与字符集相关的问题主要有三个层次的字符集的设置,其中system级别和instance级别的字符集可以根据需求进行修改, 而db级别的数据集则必须在建库时确定
字符集分为是3种级别的字符集,包括操作系统locale,DB2CODEPAGE 和 database codepage
1、操作系统 Locale:系统级别的代码页设置,决定应用程序的默认代码页;unix/linux export LANG="zh_CN.UTF-8"中文export LANG="en_US.UTF-8"英文Windows:在“起头->设置->控制面板->区域选项”中
2、DB2CODEPAGE:DB2 实例级别的代码页设置,它会影响DB2相关应用程序对代码页转换时做出代码页判定
修改代码页的字符集
db2set db2codepage=??
重启实例。
3、DATABASE CODEPAGE:DB2 数据库级别的代码页设置;必须在建库时进行设置。
db2 “create database db_name using CODESET UTF-8 TERRITORY CN"
添加新评论0 条评论