nanjing_2013
作者nanjing_2013·2012-05-03 15:41
系统架构师·北京卓望

db2的代码页 codepage

字数 3043阅读 878评论 0赞 0
一、字符集的概念
        字符集(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

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

  • 直播
    评论 0 · 赞 0
  • 常用操作实践总结
    评论 0 · 赞 0
  • 集群升级
    评论 0 · 赞 0
  • reorgchk统计信息使用的相关注意事项
    评论 0 · 赞 0
  • itpub--王大师分享
    评论 0 · 赞 0
  • 相关文章

    X社区推广