当前位置: 首页 > 面试题库 >

如何使用时区信息在MySQL中存储日期时间

薛利
2023-03-14
问题内容

我有数千张在坦桑尼亚拍摄的照片,我想将每张照片的日期和时间存储在MySQL数据库中。但是,该服务器位于美国,当我尝试存储坦桑尼亚的日期时间(在美国的Spring夏时制时间)处于“无效”小时之内时,我遇到了问题。坦桑尼亚不执行夏令时,因此该时间实际上是有效时间。

其他复杂情况是,来自许多不同时区的协作者将需要访问存储在数据库中的日期时间值。我希望他们 总是
以坦桑尼亚的时间出现,而不是出现在各个合作者所在的当地时间。

我不愿意设置会话时间,因为我知道当某人有时忘记设置会话时间并弄错所有时间会出现问题。而且我无权更改有关服务器的任何内容。

我读过: 夏令时和时区最佳实践以及 MySQL日期时间字段和夏令时-
我该如何引用“额外”小时?
和 将日期时间存储为PHP /
MySQL中的UTC

但是它们似乎都没有解决我的特殊问题。我不是SQL专家;设置DATETIME时,是否可以指定时区?我还没看过 否则,对于如何解决此问题的任何建议将不胜感激。

编辑:这是我遇到的问题的一个示例。我发送命令:

INSERT INTO Images (CaptureEvent, SequenceNum, PathFilename, TimestampJPG) 
VALUES (122,1,"S2/B04/B04_R1/IMAG0148.JPG","2011-03-13 02:49:10")

我得到错误:

Error 1292: Incorrect datetime value: '2011-03-13 02:49:10' for column 'TimestampJPG'

该日期和时间存在于坦桑尼亚,但在数据库所在的美国不存在。


问题答案:

你说:

我希望他们总是以坦桑尼亚的时间出现,而不是出现在各个合作者所在的当地时间。

如果是这种情况,那么你应该 使用UTC。您需要做的就是DATETIME在MySQL中使用类型而不是TIMESTAMP类型。

从MySQL文档:

MySQL将TIMESTAMP值从当前时区转换为UTC以进行存储,然后从UTC转换为当前时区以进行检索。(对于其他类型,例如,不会发生这种情况DATETIME。)

如果您 已经在
使用一种DATETIME类型,则一定不要在本地时间开始设置它。您将需要减少对数据库的关注,而将更多的精力放在应用程序代码上(在此未显示)。该问题和解决方案将根据语言而变化很大,因此请确保使用您的应用程序代码的适当语言标记该问题。



 类似资料:
  • 更复杂的是,来自许多不同时区的协作者将需要访问存储在数据库中的日期-时间值。我希望他们总是出来作为坦桑尼亚的时间,而不是在当地的时间,各种合作者在。 我不太愿意设定会话时间,因为我知道如果有人忘记设定会话时间,而把时间算错了,就会有问题。我无权更改服务器的任何内容。 我读过:夏令时和时区最佳实践和MySQL日期时间字段和夏令时--我如何引用“额外”小时?并在PHP/MySQL中将datetime存

  • 问题内容: 如何配置JPA /hibernate模式以UTC(GMT)时区在数据库中存储日期/时间?考虑以下带注释的JPA实体: 如果日期为太平洋标准时间(PST)2008-Feb-03 9:30 am,那么我希望数据库中存储2008-Feb-03 5:30 pm的UTC时间。同样,从数据库中检索日期时,我希望将其解释为UTC。因此,在这种情况下530pm是UTC 530pm。显示时,它将被格式化

  • 问题内容: 如何配置JPA /hibernate模式以UTC(GMT)时区在数据库中存储日期/时间?考虑以下带注释的JPA实体: 如果日期是太平洋标准时间(PST)2018-Feb-03 9:30 am,那么我希望数据库中存储2008-Feb-03 5:30 pm的UTC时间。同样,从数据库中检索日期时,我希望将其解释为UTC。因此,在这种情况下,530pm是UTC 530pm。显示时,它将被格式

  • 我读过很多关于的文章。这里有一个很好的。本文建议将datetime存储在两个独立的列中,一个列用于UTC datetime,另一个列用于本地datetime,另一个列用于本地时区。如果我正确理解的话,datetime指的是用户/客户机的datetime和时区。现在我知道可以使用保存UTC日期时间。但是如何使用PHP保存本地日期时间和时区呢?我需要一个方向。

  • 问题内容: 我很想知道我在考虑的是不好的做法,还是因为这是一个具体而刻意的选择,实际上是否是一个不错的主意。我想存储特定城市中发生的事件的日期信息。我想将该数据存储为UTC时间戳。简单地存储时间戳和城市ID /国家/地区ID(与特定时区相关联),而不是为每个事件存储时区,不是一个好主意吗?我问是因为时区可以更改,但是城市ID在数据库中永远不会更改。一旦在时区更改(不太可能)事件中将服务器与最新时区

  • 问题内容: 我所读到的有关将时间转换为用户时区的所有信息都说,最好的方法是在UTC中存储日期和时间,然后将用户的时区偏移量添加到该时间。 如何以UTC时间存储日期?我使用MySQL DATETIME字段。 当在我的PHP代码中向MySQL添加新记录时,我将用于插入MySQL DATETIME。 我需要使用不同于存储UTC时间的其他方法吗? 问题答案: MySQL: 以’YYYY-MM-DD HH: