ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle时区学习

oracle时区学习

原创 Linux操作系统 作者:fenglixiang 时间:2010-04-27 16:28:13 0 删除 编辑

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博客 ” ,链接:https://blog.itpub.net/9524377/viewspace-660903/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 日记
请登录后发表评论 登录
全部评论

注册时间:2009-02-19

  • 博文量
    47
  • 访问量
    92827