一。ORACLE字符编码方案
1.单字节字符集:
在单字节字符集中,每个字符只占一个字节。单字节7 位编码方案最多可以定义128 (2^7) 个字符;单字节8 位编码方案最多可以定义256 (2^8) 个字符。
单字节方案示例:
7 位字符集:美国7 位ASCII 码(US7ASCII)
8 位字符集:
西欧ISO 8859-1 码(WE8ISO8859P1)
西欧8 位EBCDIC 代码页500 码(WE8EBCDIC500)
西欧8 位DEC 码(WE8DEC)
2.宽度固定的多字节字符集
除了每个字符采用字节数固定的格式外,宽度固定的多字节字符集同多字节字符集提供的支持类似。这提供了每个字符具有统一字节长度表示法的好处。Oracle 仅支持一个宽度固定的多字节字符集,且该字符集只位于国家字符集AL16UTF16 中。
宽度固定的多字节字符集示例:AL16UTF16、16 位Unicode(宽度固定的双字节Unicode)
3.宽度可变的多字节字符集
在宽度可变的多字节字符集中,每个字符以一个或多个字节表示。多字节字符集通常用于支持亚洲语言。有些多字节编码方案使用最有效的位值来表明,一个字节是表示单个字节还是作为代表一个字符的一系列字节中的一部分。然而,其它字符编码方案可以区分单字节和多字节字符。在碰到移入代码之前,由设备发出的移出控制代码表明后面的字节都是双字节字符。
宽度可变的多字节方案示例:日文扩展UNIX 代码(JEUC);中文GB2312-80 (CGB2312-80);AL32UTF8 (UTF-8)
4.Unicode 字符集
Unicode 是一种全球字符编码标准,可以表示计算机中使用的所有字符,包括技术符号和出版用的字符。Unicode 标准3.0 版包含49,149 个字符,容量超过一百多万个字符。Unicode 全套字符可以用不同的编码格式表示。UTF-16(通用字符集转换格式)是一种宽度固定的双字节格式;而UTF-8 是一种宽度可变的多字节格式。
Oracle 提供AL32UTF8、UTF8 和UTFE 作为数据库字符集,同时提供AL16UTF16 和UTF8 作为国家字符集。基于UTF-8 的字符集的优点是它们包括使用相同单字节编码的ASCII。UTF8 是ASCII 的超集,因此,从基于ASCII 的字符集升级到Unicode 时,数据库字符集的移植会变得更加简单。
二。数据库字符集和国家字符集
数据库字符集 | 国家字符集 |
在创建时定义 | 在创建时定义 |
除非重新创建,否则无法更改 | 除非重新创建,否则无法更改 |
用来存储CHAR, VARCHAR2, CLOB, LONG等类型数据 |
存储类型为NCHAR、NVARCHAR2、NCLOB的数据列 |
用来标示诸如表名、列名以及PL/SQL变量等 | 国家字符集实质上是为oracle选择的附加字符集,主要作用是为了增强oracle的字符处理能力,因为NCHAR数据类型可以提供对亚洲使用定长多字节编码 |
可以存储宽度可变的字符集 | 可以采用AL16UTF16 或UTF8 格式存储Unicode |
三.字符集的相关参数NLS_
3.1NLS相关字典视图
3.2修改NLS参数:
NLS作用优先级别:Sql function > alter session > 环境变量或注册表 > 参数文件 > 数据库默认参数
3.3 NLS_LANG格式 : NLS_LANG = <language>_<territory>.<client character set>
Language: 显示oracle消息,校验,日期命名
Territory:指定默认日期、数字、货币等格式
Client character set:指定客户端将使用的字符集
注:视图NLS_DATABASE_PARAMETERS
修改NLS参数示例:
1 --以 ALTER SESSION 为例: 2 --查看当前会话参数 3 SQL> select * from nls_session_parameters;# v$nls_parameters 4 5 PARAMETER VALUE 6 ------------------------------ -------------------- 7 NLS_LANGUAGE AMERICAN 8 NLS_TERRITORY AMERICA 9 NLS_CURRENCY $ 10 NLS_ISO_CURRENCY AMERICA 11 NLS_NUMERIC_CHARACTERS ., 12 NLS_CALENDAR GREGORIAN 13 NLS_DATE_FORMAT DD-MON-RR 14 NLS_DATE_LANGUAGE AMERICAN 15 NLS_SORT BINARY 16 NLS_TIME_FORMAT HH.MI.SSXFF AM 17 NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXF 18 19 PARAMETER VALUE 20 ------------------------------ -------------------- 21 F AM 22 23 NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR 24 NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXF 25 F AM TZR 26 27 NLS_DUAL_CURRENCY $ 28 NLS_COMP BINARY 29 NLS_LENGTH_SEMANTICS BYTE 30 NLS_NCHAR_CONV_EXCP FALSE 31 32 17 rows selected
1 --查看时间格式 2 SQL> select last_name,hire_date from hr.employees; 3 4 LAST_NAME HIRE_DATE 5 ------------------------- --------- 6 King 17-JUN-87 7 Kochhar 21-SEP-89 8 De Haan 13-JAN-93
1 --改变NLS_LANGUAGE 参数 2 SQL> alter session set NLS_LANGUAGE=Italian; 3 4 Session altered. 5 6 --产看改变参数后的时间格式 7 SQL> select last_name,hire_date from hr.employees; 8 9 LAST_NAME HIRE_DATE 10 ------------------------- --------- 11 King 17-GIU-87 12 Kochhar 21-SET-89 13 De Haan
--其时间格式发生变化