-1

我们最近将 MySQL 从 5.6 升级到 8。因此,根据升级说明, 在数据库 url 中使用mysql-java-connector(8.0.12)和新的驱动程序类名称,即com.mysql.cj.jdbc.Driver 。但仅在这个时区“马来半岛标准时间”出现以下错误

马来半岛标准时间'无法识别或代表多个时区。如果要使用时区支持,则必须配置服务器或 JDBC 驱动程序(通过 serverTimezone 配置属性)以使用更具体的时区值。在 com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)

使用以下配置在 tomcat context.xml 中创建连接

<Resource auth="Container" driverClassName="com.mysql.cj.jdbc.Driver" factory="com.grc.common.EncryptedDataSourceFactory" maxActive="100" maxIdle="30" maxWait="10000" minEvictableIdleTimeMillis="30000" minIdle="10" name="jdbc/TestDB" password="0df9f21ee02a561fa39f18f5c7581061" removeAbandoned="true" removeAbandonedTimeout="180" testOnBorrow="true" testOnReturn="false" testWhileIdle="true" timeBetweenEvictionRunsMillis="30000" type="javax.sql.DataSource" url="jdbc:mysql://127.0.0.1:3306/production1?useSSL=false" username="root" validationInterval="30000" validationQuery="SELECT 1"/>

另外,尝试使用如下的 serverTimezone 参数,但没有运气。

<Resource auth="Container" driverClassName="com.mysql.cj.jdbc.Driver" factory="com.grc.common.EncryptedDataSourceFactory" maxActive="100" maxIdle="30" maxWait="10000" minEvictableIdleTimeMillis="30000" minIdle="10" name="jdbc/TestDB" password="0df9f21ee02a561fa39f18f5c7581061" removeAbandoned="true" removeAbandonedTimeout="180" testOnBorrow="true" testOnReturn="false" testWhileIdle="true" timeBetweenEvictionRunsMillis="30000" type="javax.sql.DataSource" url="jdbc:mysql://127.0.0.1:3306/production1?useSSL=false&amp;serverTimezone=Malay Peninsula Standard Time" username="root" validationInterval="30000" validationQuery="SELECT 1"/>
4

1 回答 1

0

我在没有更改操作系统级别的任何注册表的情况下解决了自己。这可能对其他人有所帮助。

由于“马来半岛标准时间”的时区名称在 MySQL 中不可用,因此出现此错误。所以按照这个 MySQL 文档中的说明从这个MySQL 时区下载timezone_2018e_posix_sql.zip并按照说明加载到 MySQL 数据库中。之后在 my.ini 文件中添加以下配置并重新启动服务器。

default_time_zone=Asia/Singapore
于 2018-10-18T13:22:36.060 回答