TIMESTAMP WITH LOCAL TIME ZONE:另一种不同类型的TIMESTAMP,数据库不保存时区相关信息,而是把客户端输入的时间转换为基于
database timezone的时间后存入数据库,(这也就是database
tmiezone设置的意义所在,作为TIMESTAMP WITH LOCAL TIME
ZONE类型的计算标尺)。
当用户请求此类型信息时,Oracle把数据转换为用户session的时区时间返回给用户。
SQL> create table t2(id number,time timestamp with local time zone); ----- 创建t2表,其中time列为TIMESTAMP WITH LOCAL TIME ZONE
Table created.
SQL> insert into t2 values(1,timestamp '2014-02-12 02:10:00 -8:00');
1 row created. -----在t2表插入数据指定时区为-8:00,实际在保存到数据库时转化为基于database timezone的时间保存
SQL> select sessiontimezone from dual; -----当前客户端的session timezone 为 -6:00
SESSIONTIMEZONE
---------------------------------------------------------------------------
-06:00
SQL> select * from t2; -----查看时oracle将数据转换成当前客户端session timezone的时间
ID TIME
---------- ---------------------------------------------------------------------------
1
2014-02-12 04:10:00.000000
在了解了相关数据类型后,那么我们该如何在它们之间做出选择呢?
不需要保存时区/地区信息的时候,选择使用TIMESTAMP数据类型
需要保存时区/地区信息的时候,请选择使用TIMESTAMP WITH TIME
ZONE数据类型。比如一个跨国银行业务应用系统,需要精确纪录每一笔交易
的时间和地点(时区),在这种情况下就需要纪录时区相关信息。
当我们并不关心操作发生的具体地点,而只是关心操作是在你当前时区的几点发生的时候,选择使用TIMESTAMP WITH LOCAL TIME
ZONE。
比如一个全球统一的change control system。用户可能只关心某某操作是在我的时间几点发生的(比如中国用户看到的是北京时间8:00am,
而伦敦的用户看到的是0:00am)。记住,此类行不保存时区/地区信息,因此如果需要保存相关信息的要慎重!