mysql5.7即以后的版本跟以下版本相差比较大,经常会出现旧版中的数据到新版就出现各种问题,记一次idea连接mysql8错误,原idea项目是机房老师上课发来的,机房环境是idea2019,mysql5.6,用的connector/j版本为mysql-connector-java-5.0.5-bin.jar,本人电脑的环境是idea2020,用的connector/j版本为mysql8.0.22,mysql-connector-java-8.0.22.jar,把老师的项目导入到我的idea就出现各种问题。

 

问题一:idea加载mysql驱动类失败

报错内容:

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

图示:

解决方法:

加载驱动地址改为com.mysql.cj.jdbc.Driver

 

问题二:mysql时区不统一

报错内容:

Exception in thread "main" 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 specific time zone value if you want to utilize time zone support.

解决方法:

方式一:修改MySQL时区

先用cmd命令行连接上数据库,win+r输入cmd回车可以快速打开cmd

输入mysql -u root -p回车后输入密码再回车登录MySQL

继续输入命令show variables like '%time_zone%';回车,需要把value列system时区改掉

修改命令:set global time_zone='+8:00';

然后关闭连接重新打开cmd,再输入命令show variables like '%time_zone%';查询一下时区,就变成+8:00了

此时进入idea测试,发现不报该错误了

如需改回原来的时区就用改命令:set global time_zone='SYSTEM';

方式二:代码中给定时区

在url中数据库名后面加入代码?serverTimezone=GMT%2B8&useSSL=false

如图,其中eblog是我的数据库

推荐使用第一种方式,第一种方式改一次就可以了,第二种方式需要每个项目都要加

 

问题三:导入mysql-connector-java各种类错误

问题一也算是这个问题,mysql-connector-java-8.0.22和mysql-connector-java-5.0.5许多类的路径不同,所以导入路径不同

如图,老师发给我的项目导入了一个StringUtils类,他导入的地址是import com.mysql.jdbc.StringUtils;到我这里就报错了

我们来对比一下mysql-connector-java-5.0.5和mysql-connector-java-8.0.22,在5.0.5版本中可以在路径com.mysql.jdbc.StringUtils找到该类,但是8.0.22版本中找不到

然后我们去8.0.22版本里的jar包里去找StringUtils包,可以找到该包路径在com.mysql.cj.util下,我们idea导包import com.mysql.jdbc.StringUtils;换成 import com.mysql.cj.util.StringUtils;就可以了

授人以鱼不如授人以渔,每天都要进步