字符集
Oracle数据库软件有自己的字符集,不依赖于主机操作系统的字符集。
Oracle支持数百种字符集,我们在建立数据库时应该充分考虑实际业务需求,从而选择合适的字符集。
比如,我们确定数据库只是中国人来用,那么就可以选择ZHS16GBK字符集。
语言支持
查询v$nls_valid_values视图:
可以看到结果中支持很多语言,比如SIMPLIFIED CHINESE,TRADITIONAL CHINESE,JAPANESE等。
Oracle默认排序规则是BINARY,同时Oracle还提供了很多排序规则供用户选择:
--查询数据库排序支持情况 select * from v$nls_valid_values where parameter='SORT';地区支持
查询数据库支持的地区:
结果可以看到很多支持的地区,比如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的数据类型,这个选择没有意义。
在9i版本之前,无法改变数据库字符集,从9i版本开始,虽然可以改字符集,但无法保证这种方法有效。
可以使用csscan和lcsscan工具来帮助决定字符集是否能够修改(必须首先运行csminst.sql脚本)。
确定可以无损改变数据库字符集后,就可以通过执行alter database character set..命令来完成字符集的修改。
命令本身要求目标字符集必须是原始字符集的一个超集,但不能保证不存在问题。
数据库级别的全球化设置。
--查询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"