关于字符集中NLS_LANG参数show parameter nls 和v$nls_parameter 中的值不一样

来源:互联网 发布:电脑服装效果图软件 编辑:程序博客网 时间:2024/05/18 10:15

今天下午,在测试库上偶然发现:

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 CHINESENLS_TERRITORY                  CHINANLS_CURRENCY                   ?NLS_ISO_CURRENCY               CHINANLS_NUMERIC_CHARACTERS         .,NLS_CHARACTERSET               ZHS16GBKNLS_CALENDAR                   GREGORIANNLS_DATE_FORMAT                DD-MON-RRNLS_DATE_LANGUAGE              SIMPLIFIED CHINESENLS_SORT                       BINARYNLS_TIME_FORMAT                HH.MI.SSXFF AMNLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AMNLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZRNLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZRNLS_DUAL_CURRENCY              ?NLS_COMP                       BINARYNLS_LENGTH_SEMANTICS           BYTENLS_NCHAR_CONV_EXCP            FALSENLS_NCHAR_CHARACTERSET         AL16UTF16NLS_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字符编码占的空间少,性能更好






原创粉丝点击