错误:客户端不支持服务器请求的身份validation协议; 考虑升级MySQL客户端

执行JDBC程序时,连接到数据库时出现以下错误:

Exception in thread "main" com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:921) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:885) at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3421) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1247) at com.mysql.jdbc.Connection.createNewIO(Connection.java:2775) at com.mysql.jdbc.Connection.(Connection.java:1555) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285) at java.sql.DriverManager.getConnection(DriverManager.java:664) at java.sql.DriverManager.getConnection(DriverManager.java:270) at main.java.MyFirstJdbcProgram.readDataBase(MyFirstJdbcProgram.java:23) at main.java.Main.main(Main.java:6) 

当我研究这个时,我知道下面的错误是因为我需要向用户授予权限,所以请遵循

  1. mysql -u root -p
  2. 然后输入密码
  3. 然后我跑了

     GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'mypassword'; 

    而且我也用过

     UPDATE user SET authentication_string=password('mypassword') WHERE user='root'; 

但我得到了以下错误

错误1064(42000):您的SQL语法有错误; 查看与您的MySQL服务器版本对应的手册,以便在第1行的“IDENTIFIED BY’mypassword”附近使用正确的语法

出现此错误的原因是您使用的是MySQL Connector / J 5.1.45或更早版本。 MySQL 8引入了一种新的身份validation机制( caching_sha2_password ),在这些版本的驱动程序中不受支持。

您需要升级到MySQL Connector / J 5.1.46或更高版本。 在编写本文时,最新版本的MySQL Connector / J驱动程序是8.0.11。