/bin/csh环境:
setenv NLS_LANG
"simplified chinese_china.ZHS16GBK"
setenv NLS_DATE_FORMAT
"YYYY-MM-DD HH24:Mi:SS"
注意:DBA不能控制终端用户对NLS_LANG环境变量的设置。如果应用程序容易受到全球化的影响,那么开发人员就应该考虑到这个问题,同时在会话内控制全球化设置。
服务器端与客户端全球化设置之间的转换由Oracle Net完成。如果客户端与服务器使用不同的字符集,那么就可能无法完成数据的转换。
1.2.6 会话级别的全球化设置
会话级别的规范优先于服务器端数据库与实例级别的设置,而且会重写用户使用环境变量配置其会话的各种尝试。
设定nls_date_format
--第一种方法
alter session set nls_date_format=
'YYYY-MM-DD HH24:Mi:SS';
--第二种方法
exec dbms_session.set_nls(
'nls_date_format',
'''dd.mm.yyyy''');
--实验验证:
SQL> alter session set nls_date_format=
'YYYY-MM-DD';
Session altered.
SQL> select sysdate
from dual;
SYSDATE
----------
2016-02-03
SQL>
exec dbms_session.set_nls(
'nls_date_format',
'''dd.mm.yyyy''');
PL/SQL procedure successfully completed.
SQL> select sysdate
from dual;
SYSDATE
----------
03.02.2016
查看v$nls_parameters或者nls_session_parameters视图查看当前作用于会话的全球化设置:
select *
from v$nls_parameters;
select *
from nls_session_parameters;
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
YYYY-MM-DD HH24:Mi:SS
NLS_DATE_LANGUAGE
SIMPLIFIED CHINESE
NLS_CHARACTERSET
ZHS16GBK
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_NCHAR_CHARACTERSET
AL16UTF16
NLS_COMP
BINARY
NLS_LENGTH_SEMANTICS
BYTE
NLS_NCHAR_CONV_EXCP
FALSE
19 rows selected.
--查询nls_session_parameters,没有字符集信息
SQL>
select *
from nls_session_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
YYYY-MM-DD HH24:Mi:SS
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
17 rows selected.
1.2.7 语句级别的全球化设置
全球化设置的最优控制级别是在每个SQL语句内进行编程控制,此时必然会在SQL函数中使用NLS参数。
比如:
--分别用英语,简体中文,日语显示职员的入职日期及星期:
select to_char(HIREDATE,
'Day dd, Month YYYY',
'NLS_DATE_LANGUAGE=AMERICAN')
"English",
to_char(HIREDATE,
'Day dd, Month YYYY',
'NLS_DATE_LANGUAGE=''SIMPLIFIED CHINESE''')
"Chinese",
to_char(HIREDATE,
'Day dd, Month YYYY',
'NLS_DATE_LANGUAGE=JAPANESE')
"Japanese"
from scott.emp;
SQL>
select to_char(HIREDATE,
'Day dd, Month YYYY',
'NLS_DATE_LANGUAGE=AMERICAN')
"English",
2 to_char(HIREDATE,
'Day dd, Month YYYY',
'NLS_DATE_LANGUAGE=''SIMPLIFIED CHINESE''')
"Chinese",
3 to_char(HIREDATE,
'Day dd, Month YYYY',
'NLS_DATE_LANGUAGE=JAPANESE')
"Japanese"
4 from scott.emp;
English
Chinese
Japanese
------------------------------------ ------------------------- -------------------------
Wednesday
17, December
1980
星期三
17,
12月
1980
水曜日
17,
12月
1980
Friday
20, February
1981
星期五
20,
2月
1981
金曜日
20,
2月
1981
Sunday
22, February
1981
星期日
22,
2月
1981
日曜日
22,
2月
1981
Thursday
02, April
1981
星期四
02,
4月
1981
木曜日
02,
4月
1981
Monday
28, September
1981
星期一
28,
9月
1981
月曜日
28,
9月
1981
Friday
01, May
1981
星期五
01,
5月
1981
金曜日
01,
5月
1981
Tuesday
09, June
1981
星期二
09,
6月
1981
火曜日
09,
6月
1981
Sunday
19, April
1987
星期日
19,
4月
1987
日曜日
19,
4月
1987
Tuesday
17, November
1981
星期二
17,
11月
1981
火曜日
17,
11月
1981
Tuesday
08, September
1981
星期二
08,
9月
1981
火曜日
08,
9月
1981
Saturday
23, May
1987
星期六
23,
5月
1987
土曜日
23,
5月
1987
Thursday
03, December
1981
星期四
03,
12月
1981
木曜日
03,
12月
1981
Thursday
03, December
1981
星期四
03,
12月
1981
木曜日
03,
12月
1981
Saturday
23, January
1982
星期六
23,
1月
1982
土曜日
23,
1月
1982
14 rows selected.
二、使用数据库和NLS字符集
2.1 语言排序与选择