【问题标题】:Unexpected MySQL DATETIME behavior意外的 MySQL DATETIME 行为
【发布时间】:2015-05-28 19:21:48
【问题描述】:

当我尝试从我的 Java 应用程序将值插入到我的表中时,我看到 MySQL DATETIME 的意外行为。我已经阅读了很多关于 DATETIME 的 StackOverflow 问题和答案,但这似乎是一个完全不同的问题。

我的 Java 应用程序使用 MyBatis 和 this DateTimeTypeHandler 插入一个 joda DateTime 值 2015-03-04T22:30:59.922Z。 (我也修改了上面的代码,使用了setTimestamp(int, Timestamp, Calendar)方法但是没有注意到和结果的差异)。

我看到插入到表中的是值2015-03-04 14:30:59.922。我读到 MySQL DATETIME 使用服务器默认时区。我住在 PDT 时区,所以我希望该值为2015-03-04 15:30:59.922(即 15:30 而不是 14:30)。

令人惊讶的是,MySQL 中似乎没有任何东西指示 PDT 时区。那么为什么我在表格中的日期时间值是 2015-03-04 14:30:59.922?

mysql> select @@global.time_zone; +--------------------+ | @@global.time_zone | +--------------------+ | UTC | +--------------------+ 1 row in set (0.06 sec)

mysql> select @@session.time_zone; +---------------------+ | @@session.time_zone | +---------------------+ | UTC | +---------------------+ 1 row in set (0.07 sec)

mysql> SELECT @@system_time_zone; +--------------------+ | @@system_time_zone | +--------------------+ | UTC | +--------------------+ 1 row in set (0.07 sec)

【问题讨论】:

    标签: java mysql datetime


    【解决方案1】:

    2015 年 3 月 4 日是标准时间,因此偏移量为 -8 小时:

    UTC (Time Zone)                   Wednesday, March 4, 2015 at 10:30:00 PM     UTC         
    Los Angeles (U.S.A. - California) Wednesday, March 4, 2015 at 2:30:00 PM  PST UTC-8 hours 
    

    今天(2015 年 5 月 28 日)是夏令时,因此偏移量为 -7 小时:

    UTC (Time Zone)                   Thursday, May 28, 2015 at 10:30:00 PM     UTC         
    Los Angeles (U.S.A. - California) Thursday, May 28, 2015 at 3:30:00 PM  PDT UTC-7 hours 
    

    【讨论】:

    • 哦,我明白了。谢谢。但是,我仍然不明白为什么当全局和会话以及系统时区设置为 UTC 时它会使用 UTC-8。如何查看 DATETIME 使用的时区,有什么方法可以覆盖它?
    猜你喜欢
    • 2016-10-16
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    相关资源
    最近更新 更多