taosdata / taos-connector-jdbc

Connecting Java Application With a TDengine Database.
MIT License
41 stars 29 forks source link

3.2.7版本的连接串中的时区设置影响mysql的连接时区设置 #135

Open Chuangyu opened 8 months ago

Chuangyu commented 8 months ago

环境 CentOS 7 操作系统时区 东8区 jdk 1.8.0_201-b09

spring boot 1.5.18

taos 客户端 3.2.2.0 jdbc 版本 3.2.7

连接池均使用 ali druid (com.alibaba:druid:1.1.9/ com.alibaba:druid:1.0.26)

阿里云 RDS mysql 5.6 数据库默认时区东8区 jdbc驱动: mysql-connector-java:5.1.47 ORM spring data JPA 连接池配置 spring.datasource.druid.admin.driver-class-name=com.mysql.jdbc.Driver spring.datasource.druid.admin.url=jdbc:mysql://host/db?useUnicode=true&characterEncoding=utf-8&supportBigNumbers=true

taos 连接池配置 没有使用ORM, 直接操作 spring.datasource.druid.taos.driver-class-name=com.taosdata.jdbc.TSDBDriver spring.datasource.druid.taos.url=jdbc:TAOS://:/?locale=UTF-8&charset=UTF-8&timezone=UTC

taos数据库的写入采用拼接sql字符串的方式,spring JDBCTemplate#update(sql),没有使用ORM

现象: MySQL数据库的某个数据表字段类型 DATETIME

Java 实体对应字段类型(2个类型都测试过)java.util.Date 或者 org.joda.time.LocalDateTime 存入MySQL数据库时,时间会晚8小时,

如果 把taos jdbc 3.2.7驱动 的数据库连接串中的 timezone=UTC 去掉, 则MySQL数据库 DATETIME 写入正常

如果用taos jdbc 3.1.0驱动, timezone=UTC可以存在且不影响MySQL的写入。

该Java实体:从未向TDengine写入或读取, 即不对应TDengine中的表,只对应MySQL的表

另一个环境是 spring boot 2.4.0, jdk 8, jdbc驱动:mysql-connector-java:8.0.22 driver-class-name=com.mysql.cj.jdbc.Driver url= jdbc:mysql://host/db?serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8&supportBigNumbers=true taos jdbc url 中也有 timezone=UTC mysql 连接串中有 serverTimezone=CTT结果时间早8小时。 如果taosjdbc驱动换成3.1.0则时间正常

sheyanjie-qq commented 6 months ago

时区设置是进程级别的,因此会影响到你写mysql。建议设置一处即可。 低版本3.1.0可以工作是因为低版本根本没有设置jvm时区,只设置了底层taosc库的。3.2.7修复了这一问题。