java.sql.SQLException: The server time zone value 。。。的解决办法



关于这个问题,是在使用Activiti的时候遇到的,如下图:




具体内容如下:

Caused by: org.apache.ibatis.exceptions.PersistenceException: 

### Error getting a new connection.  Cause: java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' 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.
### Cause: java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' 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.
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.defaults.DefaultSqlSession.getConnection(DefaultSqlSession.java:300)
at org.activiti.engine.impl.db.DbSqlSession.isTablePresent(DbSqlSession.java:1011)
... 38 more
Caused by: java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' 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.
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:87)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:61)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:71)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:76)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at org.apache.ibatis.datasource.unpooled.UnpooledDataSource.doGetConnection(UnpooledDataSource.java:201)
at org.apache.ibatis.datasource.unpooled.UnpooledDataSource.doGetConnection(UnpooledDataSource.java:196)
at org.apache.ibatis.datasource.unpooled.UnpooledDataSource.getConnection(UnpooledDataSource.java:93)
at org.apache.ibatis.datasource.pooled.PooledDataSource.popConnection(PooledDataSource.java:385)
at org.apache.ibatis.datasource.pooled.PooledDataSource.getConnection(PooledDataSource.java:89)
at org.apache.ibatis.transaction.jdbc.JdbcTransaction.openConnection(JdbcTransaction.java:138)
at org.apache.ibatis.transaction.jdbc.JdbcTransaction.getConnection(JdbcTransaction.java:60)
at org.apache.ibatis.session.defaults.DefaultSqlSession.getConnection(DefaultSqlSession.java:298)
... 39 more
Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value 'Öйú±ê׼ʱ¼ä' 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.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:59)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:83)
at com.mysql.cj.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:128)
at com.mysql.cj.protocol.a.NativeProtocol.configureTimezone(NativeProtocol.java:2201)
at com.mysql.cj.protocol.a.NativeProtocol.initServerSession(NativeProtocol.java:2225)
at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1391)
at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:993)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:852)

... 52 more



问题分析:

    由错误信息可知:无法检查表是否已经使用元数据显示,在创建表的时候,不能正常连接,在往下看,The server time zone value ,关于这个版本,在Mysql服务的新版中种最为常见,因为我使用的环境为最新的MySLQ社区版8.0.11,在新版的数据库使用的时区与本地时区有区别,标准时区使用的是Unix元年的时间为起始点到当前时间中间所做的动作。国际标准失去与本地相差 8 个小时。


解决办法:

经过上面的问题分析后,该问题的解决办法有两种;

一种:通过修改数据库变量实现,如下图:


二种:在连接MySQL服务时,直接指定时区为UTC,即可,将原来的连接

jdbc:mysql://000.000.000.000:3306/etc?useUnicode=true&amp;characterEncoding=utf8

改为现在的:

jdbc:mysql://000.000.000.000:3306/etc?serverTimezone=UTC

更改后如下图:



注意:UTC一定要大写,否则无效!!!

解决完成后,再次连接MySQL数据库服务器,成功连接了,如下图:








好了,关于 java.sql.SQLException: The server time zone value  。。。 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,可以给我留言。
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。

### 回答1: 是MySQL数据库的一个错误,它表示服务器的时区值未设置或不正确。可以通过在连接字符串中添加时区参数来解决此问题,例如:jdbc:mysql://localhost:3306/mydatabase?serverTimezone=UTC。也可以在MySQL配置文件中设置默认时区值。 ### 回答2: 这个错误是由于MySQL数据库时区与JDBC连接器的时区不匹配导致的。具体地说,当JDBC连接器向MySQL发送查询时,MySQL会使用其默认的服务器时间区对日期进行解析。但是,如果JDBC连接器的时区不同,则可能会导致解析错误。 解决这个错误的方法之一是在JDBC连接器URL中明确设置时区。例如,您可以使用以下代码: ``` String url = "jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"; Connection conn = DriverManager.getConnection(url, "username", "password"); ``` 这里,在JDBC连接器URL中增加了`serverTimezone=UTC`参数,它设置了JDBC连接器的时区与MySQL服务器时区一致。您还可以将其设置为其他时区,例如: ``` serverTimezone=America/Los_Angeles serverTimezone=Asia/Tokyo ``` 另一个解决方法是在MySQL服务器上设置时区。您可以使用以下SQL语句来设置它: ``` SET @@global.time_zone = '+8:00'; ``` 这里将时区设置为东八区,也可以根据您的需要设置其他时区。 总之,解决这个错误的方法是确保JDBC连接器和MySQL服务器的时区保持一致。您可以在JDBC连接器URL中设置时区,也可以在MySQL服务器上设置时区。 ### 回答3: java.sql.sqlexception: the server time zone value错误通常在使用JDBC连接MySQL时出现。这个错误的意思是MySQL数据库的时区设置与JDBC的时区设置不匹配。 MySQL数据库中有一个时区系统变量,这个变量默认是SYSTEM,表示使用操作系统的时区设置。而在某些情况下,可能需要改变时区设置,比如,当应用程序运行在不同的时区时,需要将数据库时区设置为应用程序所在时区。 当JDBC连接MySQL时,会通过JDBC驱动程序向MySQL发送SET time_zone语句来设置时区。如果JDBC驱动程序无法识别MySQL的时区设置,就会抛出java.sql.sqlexception: the server time zone value错误。 解决这个问题的方法是修改连接字符串,添加serverTimezone参数,并指定MySQL的时区设置,例如: jdbc:mysql://localhost:3306/mydatabase?serverTimezone=Asia/Shanghai 这里指定了MySQL的时区设置为Asia/Shanghai。如果不清楚MySQL的时区设置,可以在数据库管理系统中执行以下语句来获取: SELECT @@global.time_zone; 或 SELECT @@system_time_zone; 这样就可以解决java.sql.sqlexception: the server time zone value错误了。
评论 47
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值