最佳答案
我有成千上万张在坦桑尼亚拍摄的照片,我想在 MySQL 数据库中存储每张照片拍摄的日期和时间。然而,服务器位于美国,当我试图存储一个坦桑尼亚日期时间时遇到了问题,这个日期时间恰好在春季夏令时(在美国)的“无效”小时之内。坦桑尼亚没有 DST,所以时间实际上是一个有效的时间。
额外的复杂性是,来自许多不同时区的协作者需要访问存储在数据库中的日期时间值。我希望他们出来的 一直都是作为坦桑尼亚的时间,而不是在当地时间,各种合作者在。
我不愿意设置会话时间,因为我知道如果有人忘记设置会话时间,并且把时间都弄错了,就会出现问题。我无权更改服务器的任何内容。
我读过: 夏时制和时区最佳做法 MySQL 日期时间字段和夏时制——如何引用“额外”小时 在 PHP/MySQL 中将日期时间存储为 UTC
但他们似乎都没有解决我的特殊问题。我不是 SQL 专家; 在设置 DATETIMEs 时有没有指定时区的方法?我没见过。否则,任何关于如何处理这个问题的建议都是非常值得赞赏的。
编辑: 下面是我遇到的问题的一个例子:
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'
这个日期和时间存在于坦桑尼亚,但不存在于数据库所在的美国。