首页 > 代码库 > [原创] 查看与修改oracle数据库字符集

[原创] 查看与修改oracle数据库字符集


NLS_LANG参数格式

    NLS_LANG=<language>_<territory>.<client character set>

    Language:显示oracle消息,校验,日期命名
    Territory:指定默认日期、数字、货币等格式
    Client character set:指定客户端将使用的字符集

    例如:NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
    AMERICAN是语言,AMERICA是地区,ZHS16GBK是客户端字符集


1. 查看服务器端字符集:

视图 "nls_database_parameters" 来源于props$,是表示数据库的字符集。 props$是创建数据库时存储在数据库中的信息。

select * from nls_database_parameters where parameter in (‘NLS_LANGUAGE‘,‘NLS_TERRITORY‘,‘NLS_CHARACTERSET‘);

select userenv(‘language‘) from dual;


// 示例

SQL> select userenv(‘language‘) from dual;

USERENV(‘LANGUAGE‘)
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK

SQL>

 

2. 查看实例字符集:

视图 "nls_instance_parameters" 来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。

select * from nls_instance_parameters where parameter in (‘NLS_LANGUAGE‘,‘NLS_TERRITORY‘,‘NLS_CHARACTERSET‘);


视图 "nls_instance_parameters" 由参数文件决定,只受参数文件的影响,而不受环境变量影响

 


3. 查看会话字符集:

select * from nls_session_parameters where parameter in (‘NLS_LANGUAGE‘,‘NLS_TERRITORY‘,‘NLS_CHARACTERSET‘) ;

select * from v$nls_parameters where parameter in (‘NLS_LANGUAGE‘,‘NLS_TERRITORY‘,‘NLS_CHARACTERSET‘) ;


视图 "nls_session_parameters" 取值与V$NLS_PARAMETERS,它的查询结果默认会从nls_instance_parameters继承

但是如果,我们在环境变量或者通过ALTER SESSION 改变了nls的相关参数,则会覆盖默认值。

 

// 设置

alter session set NLS_LANGUAGE=AMERICAN ;

alter session set NLS_LANGUAGE="SIMPLIFIED CHINESE" ;

// 示例

SQL> col value format a30
SQL> col parameter format a30
SQL> select * from v$nls_parameters;

PARAMETER                            VALUE
------------------------------ ------------------------------
NLS_LANGUAGE                       SIMPLIFIED CHINESE           <====语言
NLS_TERRITORY                      CHINA                                <====区域
NLS_CURRENCY                       ¥
NLS_ISO_CURRENCY                CHINA
NLS_NUMERIC_CHARACTERS         .,
NLS_CALENDAR                        GREGORIAN
NLS_DATE_FORMAT                  DD-MON-RR
NLS_DATE_LANGUAGE              SIMPLIFIED CHINESE
NLS_CHARACTERSET                ZHS16GBK                        <====数据库字符集 (此参数须与服务器字符集一致)
NLS_SORT                               BINARY
NLS_TIME_FORMAT                   HH.MI.SSXFF AM

PARAMETER                               VALUE
------------------------------ ------------------------------
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_NCHAR_CHARACTERSET        AL16UTF16                 <====国家字符集
NLS_COMP                                   BINARY
NLS_LENGTH_SEMANTICS             BYTE
NLS_NCHAR_CONV_EXCP              FALSE

已选择19行。

SQL>

 

4. 查看客户端字符集

windows: start --> run --> regedit --> Ctrl+F --> NLS_LANG

unix:    echo $NLS_LANG


// 设置客户端字符集

windows平台下

C:\> set nls_lang=AMERICAN_AMERICA.ZHS16GBK 

这样就只影响这个窗口里面的环境变量。

或者,修改注册表里面相应OracleHome的NLS_LANG的值为SIMPLIFIED CHINESE_CHINA.ZHS16GBK,可以永久生效。

 

unix平台下,就是环境变量NLS_LANG。

$export $NLS_LANG="AMERICAN_AMERICA"."ZHS16GBK"


如果检查的结果发现server端与client端字符集不一致,请统一修改为同server端相同的字符集。