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

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

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

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

我读过: Daylight saving time and time zone best practices和 MySQL datetime fields and daylight savings time -- how do I reference the "extra" hour?和 Storing datetime as UTC in PHP/MySQL

但它们似乎都没有解决我的特殊问题。我不是 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'

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

最佳答案

你说:

I want them to always come out as Tanzanian time and not in the local times that various collaborator are in.

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

From the MySQL documentation :

MySQL converts TIMESTAMP values from the current time zone to UTC for storage, and back from UTC to the current time zone for retrieval. (This does not occur for other types such as DATETIME.)

如果您已经使用了 DATETIME 类型,那么您一开始就不能按本地时间设置它。您将需要较少地关注数据库,而更多地关注您的应用程序代码 - 您没有在这里展示。问题和解决方案因语言而异,因此请务必使用应用程序代码的适当语言标记问题。

https://stackoverflow.com/questions/19843203/

相关文章:

mysql - 在 Windows 7 上重新启动 mysql 服务器

mysql - 如何向现有表添加唯一键(具有非唯一行)

mysql - 如何在 Amazon RDS 数据库服务器实例上运行命令 "mysqladmin f

sql - MySQL:ORDER BY RAND() 的替代方案

MySQL - 使用 LIMIT 更新查询

mysql - 从另一列计算的列?

mysql - phpmyadmin.pma_table_uirefs 不存在

mysql - 在 MySQL 查询中结合 UNION 和 LIMIT 操作

mysql - 查找和替换整个 MySQL 数据库

mysql - 将主机访问权限重新分配给 MySQL 用户