com.mysql.cj.jdbc.driver类找不到,说明使用了mysql 8.0但驱动jar仍是5.x版本或未正确引入;必须升级至mysql-connector-java-8.0.28+,类名严格为com.mysql.cj.jdbc.driver,并确保jar在运行时classpath中。

com.mysql.cj.jdbc.Driver 类找不到?检查驱动JAR和类名是否匹配
这个错误基本意味着你用了 MySQL 8.0 数据库,但项目里还塞着 mysql-connector-java-5.x.jar 或压根没更新驱动 JAR。MySQL 8.0 要求必须用 mysql-connector-java-8.0.28 及以上版本,并且驱动类名必须是 com.mysql.cj.jdbc.Driver,不是旧的 com.mysql.jdbc.Driver。
常见操作失误包括:
- 只改了
driver配置项,但 lib 目录或 Maven 依赖仍是 5.x 版本 - Maven 中 scope 写成
test或漏掉runtime,导致运行时不可见 - IDE 缓存未刷新,明明换了 JAR,却仍加载旧 class
验证方式:在代码中加一行 Class.forName("com.mysql.cj.jdbc.Driver");,运行看是否抛 ClassNotFoundException。如果抛了,说明 JAR 没进 classpath,别急着调 URL 参数。
Authentication plugin ‘caching_sha2_password’ cannot be loaded?优先升级驱动而非降级服务端
这是 MySQL 8.0 最典型的握手失败提示,根源是客户端驱动不支持服务端默认的认证插件 caching_sha2_password。很多教程教你在 MySQL 里执行 ALTER USER ... IDENTIFIED WITH mysql_native_password,但这只是绕开问题,不是解决它。
真正安全、可持续的做法是让客户端适配服务端:
- 确保使用
mysql-connector-java-8.0.33(当前最新稳定版)或至少8.0.28 - 连接 URL 必须显式指定时区,例如
?serverTimezone=Asia/Shanghai,否则部分驱动会因时区解析失败间接触发认证异常 - 若服务端强制要求 SSL,URL 中加
&useSSL=true&requireSSL=true;若不需要,务必写&useSSL=false,否则 8.x 驱动默认尝试 SSL 握手,失败后才退回到非 SSL 流程,容易掩盖真实认证问题
Unknown system variable ‘query_cache_size’?驱动版本与数据库功能不兼容
这个报错看似是 SQL 语法问题,实则是 JDBC 驱动“太老”,还在向 MySQL 8.0 发送已移除的系统变量查询。MySQL 8.0 彻底删除了查询缓存(query_cache_size、query_cache_type 等),而 5.x 驱动初始化时会尝试读取这些变量用于内部判断。
它暴露了一个关键事实:你正在用 5.x 驱动连 8.0 数据库。此时不要去改配置或 SQL,直接替换驱动:
- 删掉所有
mysql-connector-java-5.x.jar,包括 Tomcat 的lib/、项目的WEB-INF/lib/、Maven 的本地仓库缓存(必要时清~/.m2/repository/mysql/) - Maven 依赖必须声明为:
<dependency><groupid>mysql</groupid><artifactid>mysql-connector-java</artifactid><version>8.0.33</version><scope>runtime</scope></dependency>
- Spring Boot 2.4+ 用户注意:
spring-boot-starter-jdbc默认带的驱动可能仍是 8.0.28,建议显式覆盖版本
DBVisualizer / DBeaver / Kettle 连接失败?别碰内置驱动,手动管理更可控
这类 GUI 工具往往自带 JDBC 驱动,且版本固化。它们不会自动识别你放在 lib/ 下的新 JAR,也不会主动切换驱动类。强行修改其内置驱动风险高、易被升级覆盖。
正确做法是利用工具自身的“Driver Properties”或“Manage Drivers”界面:
- 在 DBVisualizer 中:打开 Database → Create Database Connection → 切换到 Driver 标签页 → 点击 Manage Drivers → 新增一个 Driver,Name 填 “MySQL 8.0”,Class Name 填
com.mysql.cj.jdbc.Driver,然后把下载好的mysql-connector-java-8.0.33.jar拖进去 - DBeaver 同理:窗口 → 首选项 → 数据库 → 驱动 → 新建 → 类名 + JAR 路径
- Kettle 7.x:把新 JAR 放进
data-integration/lib/,然后在数据库连接配置里,将 “Connection type” 改为 Generic database,再手动填 Driver class =com.mysql.cj.jdbc.Driver,JDBC URL 按规范写
最易被忽略的一点:这些工具在新建连接时,默认可能仍选中旧的 MySQL 驱动模板,你必须手动切换到自己定义的那个 “MySQL 8.0” 驱动,否则一切配置都是白搭。











