MYSQL & PostgreSQL 时区问题

有时候使用一样东西用习惯了,就不大会多想,而出现问题的时候也不会想到那里去。所以MYSQL 的时间这个问题可能就属于这个list.

时区的设置有哪些问题

1 跨地域的公司

如果是跨时区地域的公司,同一条记录的传递,对于时间的表述就会有以下的疑问

1.1 我是用我本地的时间来表达,还是用数据来源的地方的时间来表达

1.2 我的数据如果迁移到其他的地域的服务器,时间能变化吗?

我们比较少考虑这样的问题是因为我们的公司的业务,可能只在同一个时间的地域,所以这样的问题比较少考虑,如果是北京和乌鲁木齐,这样的跨地域的公司,我想他们是应该考虑这样的问题。

我们来做一个实验

服务器1 表示在北京 UTC + 8

服务器2 表示在斯德哥尔摩 UTC + 2

我们在服务器上建立复制关系,中国为主服务器,从库是在斯德哥尔摩

在建立表中需要注意两点

1 你需要时间是否必须是你服务器所在的时间

2 你的时间是否需要随着不同的时区改变而改变

CREATE TABLE `titles` (

`emp_no` int(11) NOT NULL AUTO_INCREMENT,

`title` varchar(50) NOT NULL,

`from_date` datetime DEFAULT NULL,

`to_date` datetime DEFAULT NULL,

`time_s` timestamp NULL DEFAULT NULL,

PRIMARY KEY (`emp_no`)

) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4

我们插入几条数据看看会怎么样

主库

从库

从库的时间

1 datetime类型的日期,输入的数据不会变动

2 timestamp 的日期类型随着不同的服务器的时区而进行时间的变动

另在使用JAVA 的时候,如果服务器是 CST,在使用JAVA JDBC 进行时间插入的时候,会出现问题,这本身是JAVA 的问题和MYSQL 以及LINUX 服务器的CST 是无关的。需要在JAVA中进行配置来避免问题。

同时一般来说MYSQL 基本上都是 time_zone 都是 system ,MySQL服务器的时区设置为system,那么操作系统时间将影响MySQL服务器使用的时间值。确保您的操作系统正在使用最新的时区信息。MYSQL的时间本身也是要和服务器时间是一致的,但如果有特殊的需求,也是可以强制time_zone 的。

命令

set global time_zone = '+08:00';

可以动态的设置MYSQL 自身的时间

或者直接在MY.CNF 中进行设置

default-time_zone = '+8:00'

然后重新启动服务器

重点到不是设置不设置,而是你的服务器要统一。

postgresql 进行时区的调整和查看

1 查看当前的服务器的设置

2 查看当前POSTGRESQL 支持的时区,我们选择上海

3 设置当前的时区

4 但设置后关闭 PSQL 后设置会失效,所以会进行系统设置,需要设置PRC

5 修改后重启动 POSTGRESQL ,时间的TIME ZONE 已经更改

原文发布于微信公众号 - AustinDatabases(AustinDatabases)

原文发表时间:2019-06-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券