3.2 数据库的字符集
字符集在创建数据库时指定,在创建后一般不能更改,所以在创建数据库时能否选择一个正确的字符集就显得尤为重要。
在创建数据库时,可以指定字符集(CHARACTER SET)和国家字符集(NATIONAL CHARACTER SET)。
字符集的主要作用如下:
用于存储CHAR、VARCHAR2、CLOB、LONG等类型数据;
用来标示诸如表名、列名以及PL/SQL变量等;
用于存储SQL和PL/SQL代码等。
国家字符集用以存储NCHAR、NVARCHAR2、NCLOB等类型数据。
这些设置在数据库创建时指定,回顾一下前面章节中曾引用的数据库创建脚本:
CREATE DATABASE "eygle"
MAXINSTANCES 8 MAXLOGHISTORY 1 MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100
DATAFILE SIZE 300M AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL
SYSAUX DATAFILE SIZE 120M AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
SMALLFILE DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE SIZE 20M AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
SMALLFILE UNDO TABLESPACE "UNDOTBS1" DATAFILE SIZE 200M AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
CHARACTER SET ZHS16GBK
NATIONAL CHARACTER SET AL16UTF16
……
以上用粗体显示的就是数据库的字符集和国家字符集设置。
在创建数据库的过程中,一定要注意选择字符集。对于简体中文平台,一般缺省的字符集是ZHS16GBK。一旦字符集选定了,数据库中能够存储的字符就受到了限制,所以选择字符集应该尽可能多地容纳所有将用到字符。
常见的中文字符集有:
ZHS16CGB231280 CGB2312-80 16-bit Simplified Chinese MB, ASCII
ZHS16GBK GBK 16-bit Simplified Chinese MB, ASCII, UDC
其中GB2312码是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集——基本集》,由国家标准总局发布,1981年5月1日实施,通行于中国内地。新加坡等地也使用此编码。
GBK编码是1995年12月颁布的指导性规范,GBK与国家标准GB 2312-80信息处理交换码所对应的、事实上的内码标准兼容;同时,在字汇一级支持ISO/IEC 10646-1和GB 13000-1 的全部中日韩(CJK)汉字(20902字),包含了更多的编码。
但是,ZHS16GBK 并非是 ZHS16CGB231280 的严格超集(虽然后者的汉字在前者中都存在,但是同样的编码在不同两个字符集中可能表达不同的汉字),所以在做数据库字符转换时仍然需要特别注意。
Oracle的字符集命名通常遵循以下命名规则:<Language><bitsize><encoding>,即<语言><比特位数><编码>,例如ZHS·16·GBK。
但是需要说明的是,有些字符集命名违背了这个规范,Oracle8/Oralce 8i中的UTF-8是第一个打破这个命名规范的字符集。
可以看到一类字符集以AL开头,如AL16UTF16,其中AL代表ALL,指适用于所有语言(All Languages),按照这个标准当年UTF-8本应被命名为AL24UTF8。