Oracle数据库全球化

字符集
Oracle数据库软件有自己的字符集,不依赖于主机操作系统的字符集。
Oracle支持数百种字符集,我们在建立数据库时应该充分考虑实际业务需求,从而选择合适的字符集。
比如,我们确定数据库只是中国人来用,那么就可以选择ZHS16GBK字符集。

语言支持
查询v$nls_valid_values视图:

--查询数据库语言支持情况 select * from v$nls_valid_values where parameter='LANGUAGE';

可以看到结果中支持很多语言,比如SIMPLIFIED CHINESE,TRADITIONAL CHINESE,JAPANESE等。

Oracle默认排序规则是BINARY,同时Oracle还提供了很多排序规则供用户选择:

--查询数据库排序支持情况 select * from v$nls_valid_values where parameter='SORT';

地区支持
查询数据库支持的地区:

--查询数据库地区支持情况 select * from v$nls_valid_values where parameter='TERRITORY';

结果可以看到很多支持的地区,比如CHINA,CANADA,FRANCH等。选中某个地区可以默认设置许多全球化特性。

1.2 使用全球化支持功能

可以在任意级别上指定全球化(优先级由低->高):数据库、实例、客户端环境、会话、语句。

1.2.1 选择字符集

前面说过,如果我们确定数据库只是中国人来用,那么就可以选择ZHS16GBK字符集。
同样,如果要存储法语和西班牙语,就可以选择Western European字符集;如果要存储俄语或者捷克语数据,就应该选择Eastern European字符集。

数据库字符集用于存储varchar2、clob、char、long数据类型列中的所有数据。
8.0版本后,Oracle引入了National Character Set,即数据库的第二个字符集,它用于存储nvarchar2, nclob, nchar数据类型的数据。
9i版本后,Oracle的National Character Set只能为Unicode字符集,有两种选择AL16UTF16和UTF8.选择哪个要考虑nvarchar2数据类型中实际要存储的数据类型,如果大部分数据可以表示为一个字节,选择UTF8;反之选择AL16UTF16。如果实际应用表中用不到nvarchar的数据类型,这个选择没有意义。

1.2.2 改变数据库字符集

在9i版本之前,无法改变数据库字符集,从9i版本开始,虽然可以改字符集,但无法保证这种方法有效。
可以使用csscan和lcsscan工具来帮助决定字符集是否能够修改(必须首先运行csminst.sql脚本)。
确定可以无损改变数据库字符集后,就可以通过执行alter database character set..命令来完成字符集的修改。
命令本身要求目标字符集必须是原始字符集的一个超集,但不能保证不存在问题。

1.2.3 数据库中的全球化

数据库级别的全球化设置。

--查询NLS_DATABASE_PARAMETERS视图 select * from nls_database_parameters; PARAMETER VALUE ------------------------------ -------------------------------------------------------------------------------- NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA NLS_CURRENCY $ NLS_ISO_CURRENCY AMERICA NLS_NUMERIC_CHARACTERS ., NLS_CHARACTERSET ZHS16GBK NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MON-RR NLS_DATE_LANGUAGE AMERICAN NLS_SORT BINARY NLS_TIME_FORMAT HH.MI.SSXFF AM NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR NLS_DUAL_CURRENCY $ NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE NLS_NCHAR_CHARACTERSET AL16UTF16 NLS_RDBMS_VERSION 11.2.0.4.0 20 rows selected. 1.2.4 实例级别的全球化

实例级别的全球化设置,实例参数设置会重写数据库设置。

--查询nls_instance_parameters视图 select * from nls_instance_parameters PARAMETER VALUE ------------------------------ ------------------------------ NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA NLS_SORT NLS_DATE_LANGUAGE NLS_DATE_FORMAT NLS_CURRENCY NLS_NUMERIC_CHARACTERS NLS_ISO_CURRENCY NLS_CALENDAR NLS_TIME_FORMAT NLS_TIMESTAMP_FORMAT NLS_TIME_TZ_FORMAT NLS_TIMESTAMP_TZ_FORMAT NLS_DUAL_CURRENCY NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE 17 rows selected. 1.2.5 客户端环境设置

一般我们项目常用的在客户端环境变量中配置的两个参数:

NLS_LANG NLS_DATE_FORMAT

/bin/bash环境:

export NLS_LANG="simplified chinese_china.ZHS16GBK" export NLS_DATE_FORMAT="YYYY-MM-DD HH24:Mi:SS"

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/4a4d1cc6748e0d775daa605e49dd9435.html