NLS_LANG设置应该是和客户端的字符集是一致的,用于告诉oracle我的客户端的字符集是什么,oracle根据需要进行转码和编码进行存储。我的机器:
db111@dbrac1/home/oracle$ locale
LANG=en_US.utf8
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=
设置NLS_LANG=american_america.utf8
数据库字符集为:
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_FORMATDD-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.0
按理说,oracle在存储的时候应该先把utf8的编码转换成zhs16gbk然后再进行存储,这种设置是正确的吧!
但是,我新建一个触发器
如下:
CREATE OR REPLACE TRIGGER tr_dept_time
BEFORE INSERT OR DELETE OR UPDATE
ON test
BEGIN
IF (TO_CHAR(sysdate,'DAY') IN ('星期六', '星期日')) OR (TO_CHAR(sysdate, 'HH24:MI') NOT BETWEEN '08:30' AND '18:00') THEN
RAISE_APPLICATION_ERROR(-20001, '不是上班时间,不能修改departments表');
END IF;
END;
查询的时候显示的为什么是乱码呢?
SQL> select TRIGGER_BODY from user_triggers;
TRIGGER_BODY
--------------------------------------------------------------------------------
BEGIN
IF (TO_CHAR(sysdate,'DAY') IN ('锛燂紵??', '锛燂紵锛)) OR (TO_CHAR(sysdate, 'HH24:
MI') NOT BETWEEN '08:30' AND '18:00') THEN
RAISE_APPLICATION_ERROR(-20001, '??锛燂紵?锛锛?锛燂紵?锛焑partments?锛
END IF;
END;
求大神指教!!!
|