我正在尝试在将行插入数据库之前将CURRENT_TIMESTAMP设置为UTC。根据我的阅读,这就是你如何按连接进行的。
我服务器的时区是EST(+5:00)。
我在调试时执行以下操作:
然后我将两个时间戳传递回我的页面,看看它们是什么。
第一个默认为EST:[CURRENT_TIMESTAMP] => 2016-12-15 14:01:52
其次是查询设置的UTC:[CURRENT_TIMESTAMP] => 2016-12-15 19:01:52
但是,DB中的记录的CURRENT_TIMESTAMP为2016-12-15 14:01:52(EST)。
不知道为什么!
我正在使用Sequel Pro查看我的数据库。 似乎Sequel Pro将时间戳转换为当地时间。
记录根据需要/预期通过SQL返回:
2016-12-15 19:46:50
Sequel pro显示:
2016-12-15 14:46:50
所以...这让我对我在选择DB应用程序时如何处理时区感到不满。如果有人认为这不是实际问题,请告诉我:)
答案 0 :(得分:1)
TIMESTAMP
数据类型始终以UTC格式存储在MySQL中。除了通过偏移它之外,没有办法参考其他时区存储它。无论何时使用当前time_zone
设置进行渲染,它都会被翻译。除非将TIMESTAMP
设置为time_zone
或UTC
,否则无法查看已存储的-00:00
的实际值一些等价物,然后阅读它。
所以,
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
和DATE
数据是逐字存储的,不参考时区设置。