我正在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指的是什么时区。(如果他们应该关心的话)。