標籤:style color io 檔案 資料 for art ar
關於oracle 字元集(NLS_LANGUAGE)問題的探討
--------------------------------------------------------------------------------
nls_database_parameters、nls_instance_parameters、nls_session_parameters
--------------------------------------------------------------------------------
今天,在網上搜尋關於nls視圖的相關內容,結果越查越糊塗,無奈下,還是自己動手做一下。
首先,我們看一下,這三個視圖的sql定義:
sys> select view_name,text from dba_views where view_name like ‘NLS%‘;
VIEW_NAME TEXT
------------------------- --------------------------------------------------
NLS_SESSION_PARAMETERS select substr(parameter, 1, 30),
substr(value, 1, 40)
from v$nls_parameters
where parameter != ‘NLS_CHARACTERSET‘ and
parameter != ‘NLS_NCHAR_CHARACTERSET‘
NLS_INSTANCE_PARAMETERS select substr(upper(name), 1, 30),
substr(value, 1, 40)
from v$system_parameter
where name like ‘nls%‘
VIEW_NAME TEXT
------------------------- --------------------------------------------------
NLS_DATABASE_PARAMETERS select name,
substr(value$, 1, 40)
from props$
where name like ‘NLS%‘
可以看出:
nls_database_parameters取值於props$, 即我們建立資料庫時儲存在資料庫中的資訊,這與環境變數和參數檔案等是統統沒有關係的。
nls_instance_parameters取值於v$system_parameter,下面讓我們看一下v$system_parameter 在官方文檔的定義:
V$SYSTEM_PARAMETER displays information about the initialization parameters that are currently in effect for the instance.
A new session inherits parameter values from the instance-wide values.
從這裡,我們可知,nls_instance_parameters的值有參數檔案決定,那麼會不會受到環境變數的影響哪?
經驗證,是不會的!過程如下:
首先,我們來看一下NLS_LANGUAGE的取值
sys>select parameter,value from nls_instance_parameters where parameter=‘NLS_LANGUAGE‘;
PARAMETER VALUE
------------------------------ ------------------------------
NLS_LANGUAGE SIMPLIFIED CHINESE
關閉資料庫,然後修改環境變數NLS_LANG:
sys>shutdown immediate
sys>exit
[[email protected] ~]$ vi .bash_profile
[[email protected] ~]$ . .bash_profile
[[email protected] ~]$ set | grep NLS
NLS_DATE_FORMAT=‘YYYY-MM-DD HH24:MI:SS‘
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
[[email protected] ~]$ sqlplus / as sysdba
SQL> startup
SQL> select parameter,value from nls_instance_parameters where parameter=‘NLS_LANGUAGE‘;
PARAMETER VALUE
------------------------------ ------------------------------
NLS_LANGUAGE SIMPLIFIED CHINESE
可見,nls_instance_parameters只受參數檔案的影響,而不受環境變數影響。
nls_session_parameters取值於V$NLS_PARAMETERS, 它的查詢結果預設會從nls_instance_parameters繼承,但是如果,我們在環境變數或者
通過ALTER SESSION 改變了nls的相關參數,則會覆蓋預設值。
例如,當環境變數NLS_LANG=AMERICAN_AMERICA.AL32UTF8
SQL> select parameter,value from nls_session_parameters where parameter=‘NLS_LANGUAGE‘;
PARAMETER VALUE
------------------------------ ------------------------------
NLS_LANGUAGE AMERICAN
當環境變數NLS_LANG=‘SIMPLIFIED CHINESE_CHINA.AL32UTF8‘
SQL> select parameter,value from nls_session_parameters where parameter=‘NLS_LANGUAGE‘;
PARAMETER VALUE
------------------------------ ------------------------------
NLS_LANGUAGE SIMPLIFIED CHINESE
來源: csdn 易點