Oracle全球化支持:字符集系统介绍及服务器端、客户端设置(二)

2014-11-24 17:04:12 · 作者: · 浏览: 1
RCHAR2这样的组合就能救你一命了。对于数据类型为NVARCHAR2(以及NCHAR, NCLOB)的字段,它使用是国家字符集,与数据库字符集的设置无关。自9i以后,国家字符集可选的只有AL16UTF16与AL32UTF8,UTF-16与UTF-8都是UNICODE编码标准的实现,因些可以表示世界上几乎所有的文字。

当然,如果数据库字符集本身就使了UNICODE字符集,就没有必要使用NVARCHAR2, NCHAR, NCLOB这些类型了。

数据库字符集与国家字符集比较:

数据库字符集

国家字符集

在创建时定义

在创建时定义

不重建不能再改变

除了一些例外,不重建不能再改变

用char、varchar2、clob、long存放数据列

用NCHAR、NVARCHAR2、NCLOB存放数据列

可以存放变长字符集

可以使用AL16UTF16或者UTF8存放Unicode

Oracle对字符集的命名实际上有一定的规则可寻,例如:

AL32UTF8

【AL】支持所有语言(All Language)。

【32】每字符最多占用32位(4字节)。

【UTF8】编码为UTF-8。

WE8MSWIN1252

【WE】支持西欧语言(Western Europe)。

【8】每字符需要占用8位(单字节)。

【MSWIN1252】编码为CP1252。

US7ASCII

【US】表示美国(United States)。

【7】每字符需要占用7位。

【ASCII】编码为ASCII。

其它如ZHS16GBK,ZHT16BIG5,US8PC437(编码为OEM cp437),都可以类推。

2.3. 选择数据库字符集

因为数据库字符集是用来辨别、维护SQL与PLSQL源代码,所以,它必须是EBCDIC或者7-bit ASCCII的一个超集,这使得平台本地化,因此它不可能使用定长多字节字符作为数据库字符集(即不能用AL16UTF16来作为数据库字符集)

EBCDIC平台上不能使用基于ASCII的字符集,反之亦然

2.4. 选国家字符集

有两种选择:AL16UTF16、UTF8

如果创建数据库时没有指定国家字符集,则默认是AL16UTF16.使用NVARCHAR2等数据类型时,文本内容采用国家字符集来存储和管理,而不是默认的数据库字符集。

这取决于空间和效率的考虑,AL16UTF16是定长的(2字节),而UTF8是变长的,可以在1到3字节之间,在UTF8中欧洲字符是1到2个字节,所以相对于AL16UTF16要节省空间,而亚洲字符集则用三个字节存储,所以要比AL16UTF16要的空间多。

AL16UTF16是固定长度编码,所以会比UTF8执行的快。

3.Specifying Language-Dependent Behavior

There are threeways to specify National Language Support (NLS) parameters:

§ 服务器端的初始化参数指定默认的server环境,该默认值对客户端无效。

§ Asenvironment variables for the client to specify locale-dependent behavioroverriding the defaults set for the server。

§ As theALTER SESSIONparameter to override the default set for the client or the server

alter session最高,环境变量次之,初始化参数最低;

3.1. 对服务器进行设置

NLS_LANGUAGE初始化参数:指定消息的语言、日期和月份的名称以及他们的缩写、A.D.、B.C.等的表现形式以及默认的排序机制。

NLS_TERRITORY初始化参数:指定星期与日期的numbering,默认的日期格式、10进制字符、groupsepartor和默认的ISO、当地货币标识、星期的开始时间等.

The NLS_LANGUAGE initializationparameter determines the default values of the following parameters: NLS_DATE_LANGUAGE,NLS_SORT.

NLS_TERRITORYdetermines the default values for the following parameters: NLS_CURRENCY,NLS_ISO_CURRENCY,NLS_DATE_FORMAT, NLS_NUMBERIC_CHARCTERS.

参数

NLS_LANGUAGE

NLS_DATE_LANGUAGE

NLS_SORT

AMERICAN

AMERICAN

BINARY

NLS_TERRITORY

NLS_CURRENCY

NLS_ISO_CURRENCY

NLS_DATE_FORMAT

NLS_NUMBERIC_CHARCTERS

AMERICAN

$

AMERICAN

DD-MON-RR

,.

3.2. Specifying Language-DependentBehavior for the Session

Environment variable:

–NLS_LANG=French_France.UTF8

Additional environmentvariables:

–NLS_DATE_FORMAT

–NLS_DATE_LANGUAGE

–NLS_SORT

–NLS_NUMERIC_CHARACTERS

–NLS_CURRENCY

–NLS_ISO_CURRENCY

–NLS_CALENDAR

Each component controls a subset of NLSfeatures:

NLS_LANG=_.

where:

Language: Overrides the value ofNLS_LANGUAGEand controls the same features as

NLS_LANGUAGE

Territory: Overrides the value ofNLS_TERRITORYand controls the same features as

NLS_TERRITORY

Charset: Specifies the character encodingscheme used by client application (usually that of the user’s terminal)

NLS_LANG defines a client terminal’s characterencoding scheme. Different clients can use

different encoding schemes. Data passedbetween the client and the server is converted

automatically between the two encodingschemes. The database encoding scheme should be a superset, or equivalent, ofall the client encoding schemes. The conversion is transparent to