1、数据库字符集
数据库字符集包括两个字符集:数据库字符集和国家字符集,都是在创建数据库的时候指定的。
1.1、查询当前数据库的字符集
[email protected]>col value for a30
[email protected]>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的值
[email protected]>show parameter nls_language;
NAME TYPE VALUE
------------------------------------ -----------------------------------------
nls_language string AMERICAN
2.2、参数NLS_LANGUAGE决定两个参数的默认值
[email protected]>show parameter nls_date_format;
NAME TYPE VALUE
------------------------------------ -----------------------------------------
nls_date_format string YYYY-MM-DD HH24:MI:SS
[email protected]>show parameter nls_sort
NAME TYPE VALUE
------------------------------------ -----------------------------------------
nls_sort string BINARY
2.3、查询参数NLS_TERRITORY的值
[email protected]>show parameter nls_territory;
NAME TYPE VALUE
------------------------------------ -----------------------------------------
nls_territory string AMERICA
2.4、查询数据字典v$nsl_valid_values的不同参数值
[email protected]>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
4、Oracle字符集相关查询
4.1、查询Oracle支持的语言
[email protected]>select value from v$nls_valid_values whereparameter=‘LANGUAGE‘ ;
VALUE
------------------------------
AMERICAN
4.2、查询Oracle支持的地区
[email protected]>select value from v$nls_valid_values whereparameter=‘TERRITORY‘;
VALUE
------------------------------
AMERICA
4.3、查询Oracle支持的数据库字符集
[email protected]>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