Oracle关于时间有四个类型。Date,timestamp,timestamp with time zone,timestamp with local time zone。
其中timestamp with local time zone保存了数据库时区。不同的客户端时区查询数据会造成不同结果。也就是说如果2台客户端一台时区是+8:00,另一台时区+10:00。那么如果查询这种字段,+8:00的时间如果是1点,那么+10:00的时间是3点。
Date与timestamp区别
Timestamp精度更细了。
Timestamp 与timestamp with time zone区别
timestamp with time zone比Timestamp多了两位,用于存储时区,时区保存的是客户机的时区。而不是数据库的时区。
一、
做如下实验:select sessiontimezone,dbtimezone from dual
数据库操作系统时区9:30。
Create table tz(a date,b timestamp,c timestamp with timze zone,d timestamp with local timze zone)
Insert into tz values(sysdate,sysdate,sysdate,sysdate)
现在从另一个客户端来查询数据。客户端时区
可以看出D这列时间向前了1:30小时
二、
然后再客户端插入一条记录
可以看出C字段的时区变了。也就是说保存的时区是客户端的时区。
三、
修改数据库服务器的操作系统时区(虽然对数据库没什么影响,但是重起数据库)
(利用客户端查询由于客户端的时区没有改变,所以数据的时间没有变)
四、
修改数据库时区
Alter database set time_zone=’+1:00’;
第 1 行出现错误:
ORA-30079: 当数据库有 TIMESTAMP WITH LOCAL TIME ZONE 列时不能变更数据库时区
提示,报错。
重新创建了tz表。
更改数据库时区
然后重启数据库
时间和对应的时区并没有什么变化。
得出结论:当修改操作系统时区的时候,不会对数据库数据产生影响(是否会对数据库时区产生影响window不影响,linux需要测试)。如果需要修改数据库时区,那么如果有timestamp with local time zone这种类型就不会允许修改。如果不存在timestamp with local time zone,修改后并不会对数据产生影响。(因为timestamp with local time zone保存的是dbtimezone)
参考文档:http://www.cnblogs.com/firstyi/archive/2007/09/24/903931.html
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9524377/viewspace-660903/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9524377/viewspace-660903/