有时候使用一样东西用习惯了,就不大会多想,而出现问题的时候也不会想到那里去。所以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 中进行设置
代码语言:javascript复制default-time_zone = ' 8:00'
然后重新启动服务器
重点到不是设置不设置,而是你的服务器要统一。
postgresql 进行时区的调整和查看
1 查看当前的服务器的设置
2 查看当前POSTGRESQL 支持的时区,我们选择上海
3 设置当前的时区
4 但设置后关闭 PSQL 后设置会失效,所以会进行系统设置,需要设置PRC
5 修改后重启动 POSTGRESQL ,时间的TIME ZONE 已经更改