开发者社区> 问答> 正文

使用Druid 查询mysql字段为time的问题

环境:springboot

mysql mysql-connector-java 6.0.6 com.alibaba druid-spring-boot-starter 1.1.6 问题:mysql表的字段类型为:time,实体为LocalTime,表里字段的值为00:00:00查询出来的实体为14:00 23:59:59查询出来的实体为13:59:59,换成tomcat-jdbc查询出来就是正确的。 是Druid的时区的问题吗?有没有什么解决办法呢

测过了,只要是time类型的字段,实体使用LocalTime,查询出来的时间会比真实时间早10小时

原提问者GitHub用户xielaixiaohun

展开
收起
山海行 2023-07-05 20:34:27 171 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    可能会导致Druid解析日期和时间类型的数据时出现偏差。

    为了解决这个问题,您可以尝试以下几种方法:

    在数据库连接字符串中指定时区:您可以在数据库连接字符串中指定时区,以使Druid使用指定的时区来解析日期和时间类型的数据。具体来说,您可以在连接字符串中添加useLegacyDatetimeCode=false&serverTimezone=UTC这样的参数。这将强制Druid使用UTC时区来解析日期和时间类型的数据。如果您的应用程序和数据库位于不同的时区,您需要相应地将时区参数设置为正确的值。

    在应用程序中设置时区:如果您不想在数据库连接字符串中指定时区,您可以在应用程序中设置时区。具体来说,您可以在应用程序启动时,将时区设置为正确的值。例如,在Spring Boot应用程序中,您可以在application.properties文件中添加以下配置:

    angelscript
    Copy
    spring.datasource.url=jdbc:mysql://localhost/mydatabase?useLegacyDatetimeCode=false&serverTimezone=UTC
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.username=root
    spring.datasource.password=123456
    spring.jpa.properties.hibernate.jdbc.time_zone=UTC
    这将指定使用UTC时区来解析日期和时间类型的数据。需要注意的是,这个配置可能会因为应用程序的不同而有所不同,具体要根据您的应用程序来定。

    修改Druid的时区设置:如果您无法在应用程序中设置时区,您可以尝试修改Druid的时区设置。具体来说,您可以在Druid的配置文件中添加以下配置:

    stylus
    Copy
    spring.datasource.druid.filter.stat.timeBetweenMillis=60000
    spring.datasource.druid.filter.stat.logSlowSql=true
    spring.datasource.druid.connectionProperties=serverTimezone=UTC
    这将指定使用UTC时区来解析日期和时间类型的数据。需要注意的是,这个配置可能会因为Druid版本的不同而有所不同,具体要根据您使用的Druid版本来定。

    2023-07-30 13:57:04
    赞同 展开评论 打赏
  • 您的问题可能是由于 druid 在解析 MySQL 数据时,没有正确地处理时间类型所导致的。具体来说,如果您在 MySQL 中使用的是时间类型,而 druid 在解析数据时将其转换为 long 类型,就可能会导致时间值出现偏差。

    2023-07-11 10:06:52
    赞同 展开评论 打赏
  • 在URL后面加上东八区就可以了:&serverTimezone=GMT%2B8

    原回答者GitHub用户xielaixiaohun

    2023-07-06 11:52:30
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像