MySQL 每个连接时区未正确填充 CURRENT_TIMESTAMP

标签 mysql timezone utc

我试图在将行插入数据库之前将 CURRENT_TIMESTAMP 设置为 UTC。根据我的阅读,这就是针对每个连接执行此操作的方法。

我的服务器时区是 EST (+5:00)。

我在调试时执行以下操作:

  1. 选择 CURRENT_TIMESTAMP;存储这个家伙以便在调试时使用。
  2. SET TIME_ZONE = '-00:00';
  3. 选择 CURRENT_TIMESTAMP;存储这个家伙以便在调试时使用。
  4. 到目前为止,我希望数据库连接的 time_zone 为 UTC。
  5. 照常插入/更新记录。

然后,我将两个时间戳传回我的页面,只是为了看看它们是什么。

第一个默认为 EST:[CURRENT_TIMESTAMP] => 2016-12-15 14:01:52

第二个是查询设置的 UTC:[CURRENT_TIMESTAMP] => 2016-12-15 19:01:52

但是,数据库中的记录的 CURRENT_TIMESTAMP 为 2016-12-15 14:01:52 (EST)。

不知道为什么!

<小时/>

我正在使用 Sequel Pro 查看我的数据库。 似乎 Sequel Pro 将时间戳转换为本地时间。

记录按需要/预期通过 SQL 返回:

2016-12-15 19:46:50

续集专业版显示:

2016-12-15 14:46:50

所以......这让我对我选择的数据库应用程序处理时区的方式感到有点不安。如果有人认为这不是实际问题,请务必告诉我:)

最佳答案

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 上下文中呈现当前时间戳。

DATETIMEDATE数据逐字存储,不引用时区设置。

关于MySQL 每个连接时区未正确填充 CURRENT_TIMESTAMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41171713/

相关文章:

java - 无法使用 java jdbc 驱动程序连接到 Mysql

Java 日历将时间设置为 UTC 前一天的凌晨 12 点

sql - postgresql 不正确的时区从夏令时更改

java - "DateUTC"最准确的 joda-time 表示是什么?

Pandas 时间从UTC到本地

javascript - 如何对已经从数据库中拉出的数据进行排序?

mysql - 如何从 MySQL 中随机选择行进行分页?

mysql - 当案例类和对象名称相同时,slick 2 的 Scala 问题

c - 如何知道系统正在使用哪个时区

java - java中将日期和时间转换为其他时区