1、数据库字符集

数据库字符集包括两个字符集:数据库字符集和国家字符集,都是在创建数据库的时候指定的。

1.1、查询当前数据库的字符集

SYS@orcl>col value for a30

SYS@orcl>select * from nls_database_parameters

  2   where parameter in('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');

 

PARAMETER                      VALUE

------------------------------ ------------------------------

NLS_CHARACTERSET        UTF8

NLS_NCHAR_CHARACTERSET                  AL16UTF16

参数NLS_CHARACTERSET说明数据库字符集为UTF8

参数NLS_NCHAR_CHARACTERSET说明国家字符集为AL16UTF16

1.2、修改字符集

在数据库的mount状态执行如下命令;

alter database character set utf8;

该命令不会对数据库内部的字符集进行转换,只是修改数据库中有关字符集的配置信息,因为如果是严格的超集,那么新的字符集对已有字符的编码是一样的,因些不需要改变。但是如果不是超集,则会报错,就只能以新的字符集重新创建数据库。

Oracle提供了一个非公开的命令:

alter database character set internal_convert <NEW_CHARACTER_SET_NAME>

该命令会绕开超子集的校验,而直接对字符集配置信息进行修改。

2、服务器端字符集

在服务器端有关语言由初始化参数NLS_LANGUAGE来配置。

2.1、查询参数NLS_LANGUATE的值

SYS@orcl>show parameter nls_language;

 

NAME                                           TYPE       VALUE

------------------------------------ -----------------------------------------

nls_language                                   string       AMERICAN

2.2、参数NLS_LANGUAGE决定两个参数的默认值

SYS@orcl>show parameter nls_date_format;

 

NAME                                           TYPE       VALUE

------------------------------------ -----------------------------------------

nls_date_format                              string       YYYY-MM-DD HH24:MI:SS

SYS@orcl>show parameter nls_sort

 

NAME                                           TYPE       VALUE

------------------------------------ -----------------------------------------

nls_sort                              string       BINARY

2.3、查询参数NLS_TERRITORY的值

SYS@orcl>show parameter nls_territory;

 

NAME                                           TYPE       VALUE

------------------------------------ -----------------------------------------

nls_territory                                    string       AMERICA

2.4、查询数据字典v$nsl_valid_values的不同参数值

SYS@orcl>select distinct parameter from v$nls_valid_values;

 

PARAMETER

----------------------------------------------------------------

CHARACTERSET

SORT

TERRITORY

LANGUAGE

通过输出知道数据字典v$nls_valid_values可以查询以下参数的可用值:

CHARACTERSET(数据库字符集)

SORT(排序方式)

TERRITORY(区域)

LANGUAGE(语言)

3、客户端字符集

3.1、介绍

在客户端,通过设置环境变量来定义客户端的字符集。该环境变量为如下定义:

NLS_LANG=<language>_<territory>.<client character set>

1)<language>:用来显示Oracle消息、年月的名称(例如12月是应该显示“Dec”还是“12月”),以及默认的排序机制。对应服务器的初始化参数为NLS_LANGUAGE

2<terriory>:用来显示默认的日期格式、数字格式,以及货币格式等,对应服务器的初始化参数为NLS_TERRITORY

3<client character set>:客户端使用的字符集,对应服务器的初始化参数为NLS_CHARACTERSET

3.2、具体操作

1)在操作系统提示符下,将NLS_LANG变量设置为american_america.utf8,并且调整默认的日期显示。

Windows系统中可以使用如下所示的命令:

c:/>set NLS_LANG=american_america.utf8

c:/>set NLS_DATE_FORMAT=Day dd Month yyyy

或者在Unix系统中使用如下所示的命令:

export NLS_LANG=american_america.utf8

export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS '

(2)在同一个操作系统会话中启动SQL*Plus,并且作为用户SYSTEM进行连接。

3)使用下面的命令显示当前的日期:

select sysdate from dual;

3.3、查询oracleserver端的字符集

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')

----------------------------------------------------

SIMPLIFIED CHINESE_CHINA.UTF8

4Oracle字符集相关查询

4.1、查询Oracle支持的语言

SYS@orcl>select value from v$nls_valid_values whereparameter='LANGUAGE' ;

 

VALUE

------------------------------

AMERICAN

4.2、查询Oracle支持的地区

SYS@orcl>select value from v$nls_valid_values whereparameter='TERRITORY';

 

VALUE

------------------------------

AMERICA

4.3、查询Oracle支持的数据库字符集

SYS@orcl>select value from v$nls_valid_values whereparameter='CHARACTERSET';

4.4、数据库服务器字符集环境

select * from nls_database_parameters

4.5、客户端字符集环境

select * from nls_instance_parameters

4.6、会话字符集环境

select* from nls_session_parameters