關於字符集中NLS_LANG參數show parameter nls 和v$nls_parameter 中的值不一樣

今天下午,在測試庫上偶然發現:

alter session set nls_language='american';   後

show parameter nls


這個nls_language參數竟然沒有變

執行:select * from v$nls_parameters;   (查看當前session的)


這個值變了;

也就是說我alter session set nls_language='american';修改當前會話的此參數是沒錯的

那爲什麼show parameter nls中的值沒變呢?

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

找了一下午,總算有點眉目了

關於NLS相關的參數,比較特殊:

它有三個檔:

1、數據庫服務器字符集:select * from nls_database_parameters,其來源於props$,是表示數據庫的字符集。

2、客戶端字符集環境:select * from nls_instance_parameters,其來源於v$parameter , 表示客戶端的字符集的設置    

----這就是show parameter nls中的參數(show parameter 顯示的就是v$parameter 中的值)

3、當前會話的字符集:select * from nls_session_parameters,其來源於v$nls_parameters,表示會話自己的設置  

----我們alter session set nls_language='AMERICAN';   改的就是會話的字符集


所以說我們alter session set nls_language='AMERICAN';  後show parameter nls中的值並沒有變;

因爲NLS相關的參數比較特殊,show parameter nls 顯示的是instance檔的,而不是當前session的;

別的參數,show parameter 顯示的是當前session的





*****************補充********************

SQL> select * from nls_database_parameters;
 
PARAMETER                      VALUE
------------------------------ --------------------------------------------------------------------------------
NLS_LANGUAGE                   SIMPLIFIED CHINESE
NLS_TERRITORY                  CHINA
NLS_CURRENCY                   ?
NLS_ISO_CURRENCY               CHINA
NLS_NUMERIC_CHARACTERS         .,
NLS_CHARACTERSET               ZHS16GBK
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD-MON-RR
NLS_DATE_LANGUAGE              SIMPLIFIED CHINESE
NLS_SORT                       BINARY
NLS_TIME_FORMAT                HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY              ?
NLS_COMP                       BINARY
NLS_LENGTH_SEMANTICS           BYTE
NLS_NCHAR_CONV_EXCP            FALSE
NLS_NCHAR_CHARACTERSET         AL16UTF16
NLS_RDBMS_VERSION              11.2.0.1.0
 
20 rows selected


數據庫字符集(NLS_CHARACTERSET):表中CHAR, VARCHAR2, CLOB, LONG等類型數據用數據庫字符集

國家字符集(NLS_NCHAR_CHARACTERSET):表中NCHAR, NVARCHAR2, NCLOB等類型數據用國家字符集

其實大部分情況我們都是用的數據庫字符集,國家字符集用的很少,僅作爲一個補充


US7ASCII            ----英文字符集(老外用)
zhs16cgb231280    ----進化後就是ZHS16GBK         
AL32UTF8           -----數據庫字符集(跨國企業)
AL16UTF16         ----國家字符集就用這個,不用別的           
ZHS16GBK         --- 數據庫字符集(就中國人用)

utf8          ---進化後就是AL32UTF8           


國家字符集就用AL16UTF16 

如果你的數據庫可能要涉及到多個國家的語言,那數據庫字符集選  AL32UTF8  

如果你的數據庫就中國人用,那就選 ZHS16GBK,以爲ZHS16GBK要比AL32UTF8字符編碼佔的空間少,性能更好






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章