jdbc时区

okxuctiv  于 2021-06-17  发布在  Mysql
关注(0)|答案(11)|浏览(755)

数据库:

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.27, for osx10.10 (x86_64) using  EditLine wrapper

Spring Boot:2.1.1.释放
错误:

2019-01-01 15:56:25.849 ERROR 39957 --- [  restartedMain] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Exception during pool initialization.
> :bootRun
java.sql.SQLException: The server time zone value 'AEDT' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

我的属性文件的相关部分:

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/avmaint-local?useSSL=false&serverTimezone=UTC
spring.datasource.username=#####
spring.datasource.password=########
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect

我觉得奇怪的是,这个错误表明使用的时区是aedt,而我在 spring.datasource.url . hikari初始化时是否读取其他内容?
看起来很像hikari忽略了数据库url中的服务器时区设置,而使用了我自己机器的时区,恰好是“aedt”(澳大利亚墨尔本)——这是不必要的行为。我希望hikari忽略我自己机器的时区。有人知道怎么做吗?

e5nszbig

e5nszbig1#

在shaun之后,我就有了这个:spring.datasource.url=jdbc:mysql://${mysql_host:localhost}:3306/demos?servertimezone=utc

luaexgnf

luaexgnf2#

添加 useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false 连接字符串:

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/avmaint-local?useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
ahy6op9u

ahy6op9u3#

使用jdk 14,我必须对我的 application.properties ```
spring.jpa.properties.hibername.jdbc.time_zone=US/Michigan

编辑:格式
f8rj6qna

f8rj6qna4#

另一种方法是放入文件 application.properties 下一行:

spring.jpa.properties.hibernate.jdbc.time_zone=UTC

它作为一个选项出现在:https://www.baeldung.com/mysql-jdbc-timezone-spring-boot

bksxznpy

bksxznpy5#

这对我有用。我将db url中的变量设置为 application.properties :

spring.datasource.url=jdbc:mysql://localhost:3306/db_name?serverTimezone=America/Los_Angeles
cnh2zyt3

cnh2zyt36#

我也遇到过同样的问题,但补充说

?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false

在你的模式名为我解决了这个问题之后。应该是这样的

spring.datasource.url = jdbc:mysql://localhost:3306/my-schema-name?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false

我目前正在使用mysql v8,这对我来说很好。

kadbb459

kadbb4597#

我使用的是mysql 8,通过注入user.timezone属性的值解决了这个问题。
在我的项目中使用Java8。
appliction.properties中的相关设置:

spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
spring.datasource.url=jdbc:mysql://localhost:3306/mudi?serverTimezone=${user.timezone}

使用2.3.4.release作为父项目。
使用的依赖项:
Spring Boot起动器
Spring启动机web
Spring Boot开发工具
Spring启动机测试
junit vintage发动机
Spring启动机数据jpa
mysql连接器java
嗯,
wb::

mcdcgff0

mcdcgff08#

set uselegacydatetimecode false对我有效。谢谢。。

spring.datasource.url: jdbc:mysql://localhost:3306/employee_directory? 
useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false
6rqinv9w

6rqinv9w9#

谢谢你的回答,但我找到了解决办法。
正如我所怀疑的,hikari忽略了您在数据源url中输入的任何内容(抱歉,伙计们,不管您在那里输入了什么),本质上,它从mysql本身读取时区设置,即,无论您在发出命令时看到什么结果 SELECT @@GLOBAL.time_zone; 在mysql中。在我的例子中,结果是“system”,这是我的本地机器设置的。这是aedt,mysql驱动程序不支持它,因此出现了我的异常。
在aws中运行相同的查询得到值“utc”,这是受支持的(实际上是我想要的)。
因此,我必须在本地mysql服务器中设置时区。
首先,我必须将可用时区从我的主机(macosx)加载到mysql中。我必须找出zoneinfo文件的位置(在我的例子中是/usr/share/zoneinfo),然后找出“mysql\u tzinfo\to\u sql”实用程序的位置(mysql安装的bin目录),并使用它加载本地计算机支持的时区。在mac os x中,我运行以下命令: /usr/local/mysql/bin/mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql 然后在mysql中我可以运行这个命令 SET GLOBAL time_zone = UTC; 这是一个有效的时区,并且与基于云的示例同步。
我认为这对于很多使用mysql和springboot的人来说是一个真正的陷阱。当人们处于受支持的时区时,它可以工作,但是如果您的开发机器切换到不受支持的时区,它将非常神秘地崩溃,我很惊讶,它在任何地方都没有文档记录。mysql connector/j的源代码很明显,但是你不知道它是什么。
也许是因为mysql才5年前,而我是一个老化石,而且,好吧,离开我的草坪吧!

vqlkdk9b

vqlkdk9b10#

useLegacyDatetimeCode false并设置servertimezone。

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/avmaint-local?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false
vs3odd8k

vs3odd8k11#

我在下面的db url中添加了以下变量 application.properties :

spring.datasource.url=jdbc:mysql://localhost:3306/db_name?serverTimezone=GMT-6

Spring Boot现在运行正常。

相关问题