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端相同的字符集。