MySQL的每个连接的时区不填充CURRENT_TIMESTAMP正确
我想正确的插入行到数据库之前设置CURRENT_TIMESTAMP为UTC。从我读过的内容来看,这就是你如何通过连接来完成它。MySQL的每个连接的时区不填充CURRENT_TIMESTAMP正确
我的服务器的时区是EST(+5:00)。
我做了以下在调试时:
- SELECT CURRENT_TIMESTAMP;存储这个人在调试时使用。
- SET TIME_ZONE ='-00:00';
- SELECT CURRENT_TIMESTAMP;存储这个人在调试时使用。
- 截至目前,我希望我的数据库连接的time_zone是UTC。
- 插入/更新记录照常。
然后,我将两个时间戳传递回我的页面,看看它们是什么。
第一个被默认为EST:[CURRENT_TIMESTAMP] => 2016-12-15 14:01:52
二是UTC通过查询设置:[CURRENT_TIMESTAMP] => 2016-12-15 19:01:52
然而,在数据库中记录有2016年12月15日14:01的CURRENT_TIMESTAMP: 52(美国东部时间)。
不知道为什么!
我正在使用Sequel Pro查看我的数据库。 似乎Sequel Pro会将时间戳转换为当地时间。
通过SQL该记录返回所期望/预期:
2016-12-15 19:46:50
续集专业显示:
2016-12-15 14:46:50
所以......这让我心烦一点点我的选择数据库应用程序如何处理时区。如果有人认为这不是真正的问题,所有的手段让我知道:)
TIMESTAMP
数据类型是总是存储在MySQL中的UTC。除了通过抵消它之外,没有办法参考其他时区来存储它。翻译完成后,使用当前的time_zone
设置进行翻译。除了通过设置time_zone
设置为UTC
或-00:00
或某些等价物,然后阅读它,没有办法查看存储的TIMESTAMP
的实际值。
所以,
SET time_zone = 'America/Halifax';
SELECT @a := CURRENT_TIMESTAMP; --> 2016-12-15 15:49:49
SET time_zone = 'UTC';
SELECT @a, CURRENT_TIMESTAMP; --> 2016-12-15 15:49:49 2016-12-15 19:49:49
SET time_zone = 'America/Halifax';
SELECT @a, CURRENT_TIMESTAMP; --> 2016-12-15 15:49:49 2016-12-15 15:49:49
在该序列的第二行,当前时间戳呈现为一个文本字符串变量@a,在大西洋标准时间的情况下。
第四个显示文本字符串,然后显示在UTC上下文中呈现的当前时间戳。
DATETIME
and DATE
数据是逐字存储的,没有参考时区设置。
这是总的意义。但是,我发现这个问题似乎与我用来查看我的数据库数据的应用程序(Sequel Pro)有关。该记录按预期从SELECT语句返回,但在应用程序中显示不同。 – Gurnzbot