环境: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
可能会导致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版本来定。
您的问题可能是由于 druid 在解析 MySQL 数据时,没有正确地处理时间类型所导致的。具体来说,如果您在 MySQL 中使用的是时间类型,而 druid 在解析数据时将其转换为 long 类型,就可能会导致时间值出现偏差。
在URL后面加上东八区就可以了:&serverTimezone=GMT%2B8
原回答者GitHub用户xielaixiaohun
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。