Oracle字符集理论篇1

一。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相关字典视图 

  1. NLS_DATABASE_PARAMETERS: 显示数据库当前NLS参数取值,包括数据库字符集取值
  2. NLS_SESSION_PARAMETERS: 显示由NLS_LANG 设置的参数,或经过alter session 改变后的参数值(不包括由NLS_LANG 设置的客户端字符集)
  3. NLS_INSTANCE_PARAMETE:  显示由参数文件init<SID>.ora 定义的参数
  4. V$NLS_PARAMETERS:       显示数据库当前NLS参数取值

3.2修改NLS参数:

  1. 修改实例启动时使用的初始化参数文件
  2. 修改环境变量NLS_LANG。
  3. 使用ALTER SESSION语句,在oracle会话中修改
  4. 使用某些SQL函数

  NLS作用优先级别:Sql function > alter session > 环境变量或注册表 > 参数文件 > 数据库默认参数  

3.3 NLS_LANG格式 : NLS_LANG = <NLS_LANGUAGE>_<NLS_TERRITORY>.<NLS_CHARACTERSET>

  Language: 显示oracle消息,校验,日期命名

  Territory:指定默认日期、数字、货币等格式

  Client character set:指定客户端将使用的字符集 select userenv('language') from dual;或select * from v$nls_parameters;

      注:视图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     

--其时间格式发生变化

原文地址:https://www.cnblogs.com/polestar/p/3061791.html