【问题标题】:Workaround for MySQL limited TIMESTAMP range while reserving its auto timezone conversion feature?MySQL 有限 TIMESTAMP 范围的解决方法,同时保留其自动时区转换功能?
【发布时间】:2012-08-30 20:06:59
【问题描述】:

我想要的是: 1.事务执行时,记录当前时间 2. 时区信息也被存储,以便根据客户端时区自动转换时间

所以 TIMESTAMP 听起来对我来说是一个完美的选择,但事实证明,对于需要长期存在的应用程序来说,范围太小(1970-2038)。所以我想知道如何绕过这个限制。我知道 DATETIME 有更广泛的范围,但它似乎没有满足要求。 2、请问您有什么想法吗?

【问题讨论】:

    标签: mysql database datetime timezone timestamp


    【解决方案1】:

    您可能需要将时区偏移存储在单独的字段中,并使用以 UTC 表示的 DATETIME 进行存储,除非您有充分的理由,否则您应该为所有日期和时间存储。

    需要表达完整的时区名称,因为单独的时区偏移没有意义。例如,-0400 可以指东部夏令时间或中部标准时间。

    【讨论】:

    • tadman,你的方法是合理的,但是MySQL为TIMESTAMP数据类型提供的自动时区转换呢?我不想自己进行转换(必须考虑夏令时),因为它容易出错,有什么解决方法吗?
    • 实际上并不清楚TIMESTAMP 数据类型实际上是否包含时区数据。 documentation 意味着对于 TIMESTAMP,转换是在本地时区之间完成的,其中数据始终以 UTC 存储。时区偏移量仅存储为连接或服务器参数,而不存储在数据库本身中。在您的应用程序中进行时区转换可能是最好的做法,如果您有一个可以为您执行此操作的库(大多数操作系统的标准功能),这并不难。
    • 我明白了。您对此评论的回答足以让我接受它作为最佳答案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-08-08
    • 2016-08-07
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多