Java连接MySQL报错:客户端不支持服务器认证协议求助
解决Java连接MySQL 9.0时的
Client does not support authentication protocol异常 这个异常的核心原因是你的Java JDBC驱动版本过低,不支持MySQL Server 9.0要求的认证协议。以下两种方案可以解决问题:
方案一:升级MySQL JDBC驱动
这是推荐的长期解决方案,确保驱动与MySQL Server版本兼容:
- 若使用Maven,更新
pom.xml中的依赖:<dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.0.39</version> <!-- 选择兼容MySQL 9.0的最新稳定版 --> </dependency> - 若使用Gradle,更新
build.gradle:implementation 'com.mysql:mysql-connector-j:8.0.39' - 手动管理依赖的话,获取对应版本的驱动JAR包,添加到项目的类路径中。
- 注意:MySQL Connector/J 8.0+版本的驱动类名已更新为
com.mysql.cj.jdbc.Driver,同时JDBC URL需指定时区参数,示例:String jdbcUrl = "jdbc:mysql://localhost:3306/your_database?serverTimezone=UTC&useSSL=false";
方案二:修改MySQL用户认证方式(临时兼容)
如果暂时无法升级驱动,可将数据库用户的认证方式切换为旧版兼容的mysql_native_password:
- 通过MySQL Workbench连接到你的MySQL 9.0服务器
- 执行以下SQL语句(替换
your_username和your_password为实际的用户名和密码):ALTER USER 'your_username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; FLUSH PRIVILEGES;- 若需要远程连接,将
localhost替换为%(允许所有IP)或指定的IP地址
- 若需要远程连接,将
- 执行完成后重启Java程序,即可正常连接数据库
内容的提问来源于stack exchange,提问作者Prasad Kunjir




