java.sql.SQLException:The server time zone value xxx is unrecognized

Mysql不出问题的配置方法

今天在使用springboot操作数据库时,突然报错
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.

这个错误是因为mysql连接的依赖包是高版本的情况下:
在配置datasource.url时不能简单的这样配:

#DB Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/crawler
spring.datasource.username=root
spring.datasource.password=root
        
#JPA Configuration:
spring.jpa.database=MySQL
spring.jpa.show-sql=true

而是要对其中的spring.datasource.driverClassName,以及spring.datasource.url增添一些信息

解决方法:

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/crawler?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

或者如下,直接加上?serverTimezone=UTC也行

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/crawler?serverTimezone=UTC

或者修改mysql依赖包为低版本

<!--MySQL连接包-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.6</version>
</dependency>

总结
在项目中使用mysql驱动时,如果是低版本5.xx,可以继续使用com.mysql.jdbc.Driver驱动,高版本驱动(好像是6.0开始)就应当使用新的驱动com.mysql.cj.jdbc.Driver,IDEA有一个设置,如下图,在这里会提前设置好驱动版本,那么我们在application.properties中配置的驱动就会无效,我也是被这个坑了一波,所以下面对高低版本做一个分类集合。
在这里插入图片描述

百分百正确配置

  1. 首先,idea选择Mysql提前配置好的版本,这里我们设置常用的一个高一个低版本,可以先随便选择一个,因为后面还需要配置。在这里插入图片描述

  2. 高版本 - - - 8.0.20
    在左边框下拉,选择Mysql,开始配置高版本所依赖的jar包路径,一般选择我们自己的maven本地仓库,idea默认是在.m2里面的本地仓库中调用。记得最后Apply.
    在这里插入图片描述

  3. 低版本 - - - 5. 1. 6
    同样在左边框下拉,选择Mysql的另一个低版本,我这里是命名的Mysql 5.1,开始配置低版本所依赖的jar包路径,一般选择我们自己的maven本地仓库,idea默认是在.m2里面的本地仓库中调用。记得最后Apply.
    在这里插入图片描述

  4. IDEA中的配置可以说就这样的了,现在我们可以在第一步里面选择切换自己需要的高低版本了,但是我们还需要一个配置文件:application.properties
    由于IDEA默认配置了驱动,所以我们可以不用再配置spring.datasource.driverClassName,当然也可以配置,只是默认无效,可以作为一个说明

    #DB Configuration:高版本 Mysql --- 8.0.20 
    # spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/crawler?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
    spring.datasource.username=root
    spring.datasource.password=root
    
    #JPA Configuration:
    spring.jpa.database=MySQL
    spring.jpa.show-sql=true
    
    
    #DB Configuration:低版本 Mysql --- 5.1.6
    # spring.datasource.driverClassName=com.mysql.jdbc.Driver
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/crawler
    spring.datasource.username=root
    spring.datasource.password=root
    
    #JPA Configuration:
    spring.jpa.database=MySQL
    spring.jpa.show-sql=true
    
    
### 回答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错误了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值