前段时间,研发反馈个问题:

一个新上的服务,在测试环境(MySQL5.6)跑的的好好的,发布到产线去(MySQL8.0.19) 运行不起来了,报错如下:

MySQL8 JDBC连接zeroDateTimeBehavior注意事项_zeroDateTimeBehavior


运行异常的jdbc连接串写法:

jdbc:mysql://test.mysql.db01:3306/sbtest?allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true


修改后的如下:

jdbc:mysql://test.mysql.db01:3306/sbtest?allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&zeroDateTimeBehavior=CONVERT_TO_NULL&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true


问题:

在UAT环境(阿里云MySQL RDS8.0.18),上述的“运行异常的jdbc连接串” 服务可以正常运行。 到了生产MGR8.0.19就跑不起来。 二者只有1个小版本差距,查了mysql8.0.19的release note 也没找到关于zeroDateTimeBehavior这块的大的改动。 


总体而言, 对应MySQL8的,连接还是用CONVERT_TO_NULL这种写法才是稳妥之道。