大道至简,知易行难
广阔天地,大有作为

MySQL与Debezium的时区问题

我们可以使用如下查询语句查询MySQL使用的时区:

例如:

其中,time_zone=SYSTEM说明MySQL使用SYSTEM的时区,而system_time_zone=CST说明SYSTEM使用CST时区。

其中,分别为全局使用的时区和当前session使用的时区。我们可以按如下的方式分别设置全局及session使用的时区:

当然,当使用SYSTEM时,由于CST本身可以表示中国标准时(UTC+08:00),因此在使用中也是没有任何问题的。事实上,CST时区居然能够表示四种时区,分别为:

  1. 美国中部时间,Central Standard Time (USA),UTC-06:00
  2. 澳大利亚中部时间,Central Standard Time (Australia),UTC+09:30
  3. 中国标准时,China Standard Time,UTC+08:00
  4. 古巴标准时,Cuba Standard Time,UTC-04:00

由于CST存在歧义,所以导致Java通过JDBC去获取时区的时候,通常会把CST解析为GTM+3时区。例如在Debezium就会错误地处理:

Debezium处理MySQL时间戳时区错误

Debezium处理MySQL时间戳时区错误

在jdbc连接配置上添加以下两个配置即可:

这样Debezium获取到的时间戳就是正确的了:

Debezium处理MySQL时间戳时区正确

Debezium处理MySQL时间戳时区正确

转载时请保留出处,违法转载追究到底:进城务工人员小梅 » MySQL与Debezium的时区问题

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址