我收到 MySQL 错误“客户端不支持服务器请求的身份验证协议;考虑升级 MySQL 客户端。”我正在使用 MySQL JDBC 连接器 v8.0.32:
compileOnly "mysql:mysql-connector-java:8.0.32"
...和 MySQL v8.0.32:
mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 8.0.32 |
+-----------+
1 row in set (0.00 sec)
这是我用来连接数据库的代码:
Class.forName("com.mysql.jdbc.Driver").newInstance();
// Log all variables to console (debugging)
System.out.println("host: " + host);
System.out.println("port: " + port);
System.out.println("database: " + database);
System.out.println("username: " + username);
System.out.println("password: " + password);
connection = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" + database, username, password);
这里是调试块的输出:
host: mysql
port: 3306
database: example
username: username
password: password
一切都在 Docker Compose 环境中运行——这里是 MySQL 服务器:
mysql:
image: mysql:latest
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: example
MYSQL_USER: username
MYSQL_PASSWORD: password
MYSQL_ALLOW_EMPTY_PASSWORD: true
# Have also tried with MYSQL_ROOT_PASSWORD: password
我尝试通过将用户名和密码连接成一个字符串然后传递它来进行连接。除此之外,我真的不知道该尝试什么。有些人建议使用
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456789';
,但我不想这样做,因为这将在其他人的数据库上运行,这意味着是 PnP 类型的东西。这也很奇怪,因为这是服务器和客户端的最新版本。那么它像图书馆问题吗?