【问题标题】:Can I make MYSQL automatically convert all datetime data to different timezone?我可以让 MYSQL 自动将所有日期时间数据转换为不同的时区吗?
【发布时间】:2020-02-24 05:24:21
【问题描述】:

首先,感谢您抽出宝贵的时间来查看我的初学者问题

所以问题是,我仍然无法理解 datetime 在 MySQL 上的工作原理

“我可以在更改时区时转换所有表中的所有日期时间列以匹配新时区吗?”

比如我的服务器本地时间是UTC+7 我有几个表的数据库,其中一些表包含日期时间数据类型的列(例如 CreationTime、updatedTime、visitTime 等) 现在应该,不知何故,我计划将我的服务器移动到不同的时区,比如说 UTC +8。 我可以使用一种方法将许多表中的所有日期时间列自动转换为新时区吗? 假设旧日期时间是 22/2/20 18:00:00,转换后变为 22/2/20 19:00:00。考虑到手动逐一编写所有表或所有列名的列表是不可能的,所有这些都带有方法或函数(最好是 mysql 原生的,但我可以使用 php 妥协)?

对不起,如果问题是肤浅的。我已经浏览过网络和 stackoverlow,但我在编程方面的知识微薄,无法掌握大部分讨论。

非常感谢。

【问题讨论】:

    标签: mysql timezone


    【解决方案1】:

    同样的问题在这里:Should MySQL have its timezone set to UTC?

    根据这些答案,您可以更改 /etc/mysql/my.cnf 文件以更改默认数据库时区:

    default_time_zone='+00:00'
    

     timezone='UTC'
    

    注意:正确的做法是将所有时间戳数据保存为 UTC+0 格式(后端),然后使用实际客户端时区(前端)获取。

    【讨论】:

    • 那个“通知”在我看来是不正确的。它经常被重复,好像它是所有时区工作的灵丹妙药 - 它不是,特别是对于未来的数据。它适用于时间戳,但不适用于可能具有自然时区的用户输入数据。见codeblog.jonskeet.uk/2019/03/27/…
    • @JonSkeet 因此您需要先获取客户端的时区,然后再将其保存到数据库。很简单。
    • 我认为您没有欣赏博文中强调的微妙之处。如果时区规则在存储时间和事件本身的时间之间发生变化,您将无法准确存储未来时间的 UTC 时刻。
    • @JonSkeet 我们在移动应用程序开发中一直在使用这个技巧。我们的用户遍布世界各地,因此,我们需要在实际用户时区中显示日期。作为后端开发人员,我以 unix 时间戳接收日期(iO 和 Android 细节。该日期必须采用 UTC+0 TZ 并将其存储在数据库中的日期/时间时间戳中)。时间戳中的所有 api 响应也是如此。在前端(移动应用程序和网络)中,所有日期都在实际用户 TZ 中解码。因此,如果手机将更改为另一个 TZ,则应用程序中的所有日期都会更改(因为它只查看)。这在两个方面都很完美。
    • 不,我仍然认为您没有理解这篇博文的重点。如果您尝试在特定时区存储未来某个事件的数据,那么您只能根据我们现在所知道的规则进行 预测 UTC 偏移量。这些规则可以从现在到事件发生时改变。这与手机更改为不同的时区无关,而是关于更改现有时区的规则。这一切都在博文中精心布置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 2016-08-29
    • 1970-01-01
    • 2020-03-17
    • 2020-06-03
    相关资源
    最近更新 更多