V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
JasonLaw
V2EX  ›  数据库

JDBC connection URL string 中的 serverTimezone 的作用到底是什么?

  •  
  •   JasonLaw · 2020-08-23 15:24:46 +08:00 · 1650 次点击
    这是一个创建于 1550 天前的主题,其中的信息可能已经有所发展或是发生改变。

    MySQL 时间“不正确”问题 - V2EX中,通过在 connection URL string 中显式地设置时区( serverTimezone=Asia/Shanghai )解决了问题。

    但是我还是有很多疑问。为什么“在 connection URL string 中设置时区”会将所设置时区的时间存储到 MySQL ?到底是哪里进行这样的处理的?

    以下是我查阅的一些资料:

    4 条回复    2020-08-24 15:37:24 +08:00
    yanyueio
        1
    yanyueio  
       2020-08-23 17:42:35 +08:00   ❤️ 1
    reply: 到底哪里进行这样的处理。

    国际化任务处理的时候,具体说就是时间处理。当我今天还在上海用中文时区,然后明天就到了西雅图用的美国西部时间。要在两个页面显示当地时间(从数据库读取出来的),那么要么 mysql 本身设置了统一的时区(通常 scm 不会给你权限重启 mysql),要么自己做好转换(通过连接字符串是一种补救措施)。

    如果你的应用程序启动的时候和 mysql 启动时设置的时区是一样的,那么最好了,不用写 connection 参数,否则还是要告诉 mysql 我这边存进去的时间到底是什么时区的(否则一律按数据库的时区存,否则再读取出来就变味了)。

    hope it helps.

    btw: jvm 启动时可以用 `java.util.TimeZone.setDefault(TimeZone.getTimeZone("UTC"));`设置时区。
    skai0dev
        2
    skai0dev  
       2020-08-23 17:59:29 +08:00
    ** serverTimezone **:
    Override detection/mapping of time zone. Used when time zone from server doesn't map to Java time zone

    from: https://dev.mysql.com/doc/connectors/en/connector-j-reference-configuration-properties.html
    JasonLaw
        3
    JasonLaw  
    OP
       2020-08-23 23:28:25 +08:00
    @skai0dev #2 我有点不太理解“Override detection/mapping of time zone. Used when time zone from server doesn't map to Java time zone”,可以具体解释一下吗?谢谢。
    JasonLaw
        4
    JasonLaw  
    OP
       2020-08-24 15:37:24 +08:00
    @yanyueio #1
    @skai0dev #2

    通过 @palfortime 在“MySQL 时间“不正确”问题 - V2EX”的回答 - https://www.v2ex.com/t/700563#reply15,我明白了为什么“在 connection URL string 中设置时区”会将所设置时区的时间存储到 MySQL ?明白了到底是哪里进行这样的处理的?。

    https://github.com/mysql/mysql-connector-j/blob/79a4336f140499bd22dd07f02b708e163844e3d5/src/main/protocol-impl/java/com/mysql/cj/protocol/a/NativeProtocol.java#L2228 中,会获取到 connection URL string 中所设置的 serverTimezone,最后会设置 serverSession 的 serverTimeZone 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3180 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 12:42 · PVG 20:42 · LAX 04:42 · JFK 07:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.