zoukankan      html  css  js  c++  java
  • [转] 关于oracle 字符集(NLS_LANGUAGE)问题的探讨


    关于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  
     
    [oracle@oadata ~]$ vi .bash_profile 
    [oracle@oadata ~]$ . .bash_profile 
    [oracle@oadata ~]$ set | grep NLS 
    NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
    NLS_LANG=AMERICAN_AMERICA.AL32UTF8

    [oracle@oadata ~]$ 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   作者:易点   

  • 相关阅读:
    js设计模式 -- 拷贝模式
    超简单的SpringBoot整合mybatis
    使用JS调用手机本地摄像头或者相册图片识别二维码/条形码
    SpringBootsad整合EhCache做缓存处理
    调用微信的扫一扫功能详解说明---(java 排坑版)
    获取系统文件的创建日期
    在windows上获取文件创建时间
    简单计算器
    lambda-基于谓词筛选值序列
    IEnumerable<T>和IQueryable<T>区别
  • 原文地址:https://www.cnblogs.com/fengaix6/p/3902657.html
Copyright © 2011-2022 走看看