现象
在20240310 凌晨2-3点间写入数据(比如now()生成2024-03-10 02:40:00 这样的时间数据), 在进行查询时,查到 202403-10 2-3点间的日期数据,会报Caused by: java.sql.SQLException: HOUR_OF_DAY: 2 -> 3 的错误。
原因
使用mysql-connector-java.jar版本8.x以上版本,和mysql建立连接时未设置时区(serverTimezone=GMT%2B8),GMT+8是北京时区,CTT是上海时区。
详见:https://blog.csdn.net/lan861698789/article/details/104770001
方案
排查java服务个性化配置,确认mysql连接串中是否缺失serverTimezone参数。
正例
jdbc:mysql://xxx.xxx.xxx.xxx:3306/db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=CTT
jdbc:mysql://xxx.xxx.xxx.xxx:3306/db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
jdbc:mysql://xxx.xxx.xxx.xxx:3306/db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=ASia/Shanghai
反例
jdbc:mysql://xxx.xxx.xxx.xxx:3306/db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
修改个性化配置增加serverTimezone=GMT%2B8,使用&进行参数拼接。
评论