本文主要是介绍关于字符集中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.020 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字符编码占的空间少,性能更好
这篇关于关于字符集中NLS_LANG参数show parameter nls 和v$nls_parameter 中的值不一样的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!