MySQL永远以本地时间存储日期时间



我正在MySQL数据库中存储照片时间戳。目前,我的专栏设置为:

CREATE TABLE `photos` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `camname` varchar(45) DEFAULT NULL,
  `date` date DEFAULT NULL,
  `time` time DEFAULT NULL,
  PRIMARY KEY (`ID`),
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

日期和时间表示照片拍摄的当地时间,如图像上打印的时间戳所示。因此,无论我在哪个时区检索或操作数据,上午10:45将始终,也应该始终是上午10:45。

这对分析至关重要——我们关注的是一天中事件发生的时间。以及经过了多少天等等。知道它是什么时候发生的,与以后的当地时间有关是无关紧要的,也是无用的。

那么,在MySQL数据库中存储日期时间数据的最佳方式是什么,以便它始终显示在最初记录的时间?


相关:我应该使用字段';日期时间';或者';时间戳';?

我认为答案是:有了DATETIME,你输入的就是你得到的。2015-01-23 12:45:34将始终是2015-01-23 13:45:34,而TIMESTAMP将在本地提示上以不同方式显示,DATETIME不会。

然而,根据一些评论的建议,将时区包括在内似乎是个好主意,这样亿万年后人们就可以知道DATETIME指的是什么时区。(如果他们应该关心的话)。

由于服务器会将所有时间戳转换为服务器时间,并且您需要本地时间,因此似乎有必要将时区存储在单独的列中。

我建议将时间存储为UTC,并将时区存储为整数+/-UTC(以分钟为单位)。虽然这需要额外的处理,但它允许将所需的数据存储在一个相当一致的地方。

请注意,您不应将时区存储为VARCHAR(32),例如Asia/Riyadh。这是因为这样做不会考虑夏令时,所以你的时间可能会缩短一个小时。

mysql获取服务器时间戳而不是客户端时间戳如果你需要存储数据,时间取决于你需要在查询中发送数据的客户端时间戳

使用DATETIME,您输入的就是您得到的:2015-01-23 12:45:34将始终是2015-01-23 12:45:34

使用TIMESTAMP MySQL记录自epoch(时间点)以来的秒数,并将在本地客户端上以不同方式显示

然而,根据一些评论的建议,将时区包括在内似乎是个好主意,这样亿万年后人们就可以知道DATETIME指的是什么时区。(如果他们应该关心的话)。

相关内容

  • 没有找到相关文章