天天看點

Oracle字元集(總結) 1、資料庫字元集 2、伺服器端字元集 3、用戶端字元集 4、Oracle字元集相關查詢

資料庫字元集包括兩個字元集:資料庫字元集和國家字元集,都是在建立資料庫的時候指定的。

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

在資料庫的mount狀态執行如下指令;

alter database character set utf8;

該指令不會對資料庫内部的字元集進行轉換,隻是修改資料庫中有關字元集的配置資訊,因為如果是嚴格的超集,那麼新的字元集對已有字元的編碼是一樣的,因些不需要改變。但是如果不是超集,則會報錯,就隻能以新的字元集重新建立資料庫。

Oracle提供了一個非公開的指令:

alter database character set internal_convert <NEW_CHARACTER_SET_NAME>

該指令會繞開超子集的校驗,而直接對字元集配置資訊進行修改。

在伺服器端有關語言由初始化參數NLS_LANGUAGE來配置。

SYS@orcl>show parameter nls_language;

NAME                                           TYPE       VALUE

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

nls_language                                   string       AMERICAN

SYS@orcl>show parameter nls_date_format;

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

SYS@orcl>show parameter nls_sort

nls_sort                              string       BINARY

SYS@orcl>show parameter nls_territory;

nls_territory                                    string       AMERICA

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

PARAMETER

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

CHARACTERSET

SORT

TERRITORY

LANGUAGE

通過輸出知道資料字典v$nls_valid_values可以查詢以下參數的可用值:

CHARACTERSET(資料庫字元集)

SORT(排序方式)

TERRITORY(區域)

LANGUAGE(語言)

在用戶端,通過設定環境變量來定義用戶端的字元集。該環境變量為如下定義:

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。

(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;

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

USERENV('LANGUAGE')

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

SIMPLIFIED CHINESE_CHINA.UTF8

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

VALUE

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

AMERICAN

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

AMERICA

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

select * from nls_database_parameters

select * from nls_instance_parameters

select* from nls_session_parameters

本文轉自 corasql 51CTO部落格,原文連結:http://blog.51cto.com/corasql/1700676,如需轉載請自行聯系原作者