启动Java应用遇MySQL时区错误,如何通过连接字符串指定时区?
解决JDBC连接时的AEDT时区错误
这个问题我碰到过好多次了,本质是MySQL驱动(尤其是8.0以上版本)对有些非标准时区标识符识别不友好,AEDT就是其中之一。你只需要在JDBC连接字符串里明确指定更具体的时区值就行,不用改服务器配置。
给你几个可行的配置方式:
- 直接用UTC时区(最稳妥,很多生产环境都这么用):
javax.persistence.jdbc.url=jdbc:mysql://your-host:3306/your-db?serverTimezone=UTC - 如果你想对应澳大利亚东部的时区,可以用
Australia/Sydney这个标准时区ID,它会自动处理夏令时(包括AEDT):javax.persistence.jdbc.url=jdbc:mysql://your-host:3306/your-db?serverTimezone=Australia/Sydney - 也可以用GMT+11来直接指定偏移量,但这种方式不会自动适配夏令时变化,不如上面的时区ID灵活:
注意这里的javax.persistence.jdbc.url=jdbc:mysql://your-host:3306/your-db?serverTimezone=GMT%2B11+要转成URL编码的%2B,不然会被当成参数分隔符处理。
另外提醒下,如果你用的是MySQL 8.0+的驱动,记得确保驱动版本和URL参数匹配,老版本驱动可能不需要这个配置,但新版本默认要求明确时区。
内容的提问来源于stack exchange,提问作者masber
相关产品推荐
相关产品推荐

