mysql和oracle中TimeStamp的时区问题

作者:faaronzheng 转载请注明出处!

针对mysql和oracle中TimeStamp的时区问题,实验总结如下:

mysql:

mysql的TimeStamp默认是不进行时区转化的,存储的是时间和服务端时区,读取到的是时间和客户端时区,时间是一致的。要开启时区转化,需要设置jdbc连接串的useTimezone=true。
如:jdbc:mysql://localhost:3306/table_name?useTimezone=true

这种情况下数据库显示的时间是服务端时区的时间,但是如果此时数据库时区使用的SYSTEM的话会有问题,导致存的时间比实际时间早13或14小时,读取的时间比实际时间晚13或14小时,主要是因为CST时区有多重含义,所以一般最好不要用CST时区。

此外还可以设置serverTimezone,设置后数据库显示的是设置时区的时间,不同时区客户端读取后还会进行时区转换。
如:jdbc:mysql://localhost:3306/table_name?useTimezone=true&serverTimezone=GMT%2B8,GMT%2B8表示东八区

可以参考

https://blog.csdn.net/sweatOtt/article/details/78111748

https://juejin.im/post/5902e087da2f60005df05c3d

oracle:

oracle中TIMESTAMP包括三种类型:TIMESTAMP,TIMESTAMP WITH TIME ZONE,TIMESTAMP
WITH LOCAL TIME ZONE

  • TIMESTAMP不存储时区信息

  • TIMESTAMP WITH TIME ZONE 存储客户端时区信息

  • TIMESTAMP WITH LOCAL TIME ZONE 根据服务端时区对客户端时间进行转化存储


ps: 服务端时区指的是数据库时区,客户端时区指的是前台或者具体的应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值