JDBC连接MySQL的应用构建失败,报Unknown system variable 'query_cache_size'异常
解决JDBC连接MySQL时的"Unknown system variable 'query_cache_size'"错误
这个问题我之前帮不少开发者排查过,本质就是MySQL驱动版本和数据库版本不兼容导致的!
问题根源
从MySQL 8.0版本开始,官方已经彻底移除了查询缓存功能,连带query_cache_size这个系统变量也被删掉了。但你当前使用的mysql-connector-java-5.1.41是比较老旧的驱动版本,它启动时还会尝试读取这个已经不存在的变量,所以直接抛出了这个SQLException。
两种解决方案
方案一:升级MySQL驱动版本(推荐)
把驱动版本升级到适配MySQL 8.0+的稳定版,比如8.0.33(或者最新的兼容版本)。
如果是Maven项目,修改pom.xml中的依赖:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency>
升级后需要注意两个细节:
- JDBC驱动类名要替换成
com.mysql.cj.jdbc.Driver,旧的com.mysql.jdbc.Driver已经被标记为过时,8.x驱动默认使用新类名 - 连接URL建议加上时区参数,比如
jdbc:mysql://localhost:3306/your_db?serverTimezone=UTC&useSSL=false,避免时区相关的额外报错
方案二:降级MySQL版本(不推荐)
如果因为项目限制暂时无法升级驱动,只能把你的MySQL数据库降级到5.7及以下版本——因为5.7还保留着查询缓存相关的系统变量,老驱动可以正常识别。不过这个方案只是权宜之计,毕竟MySQL 5.7已经进入维护阶段,长期来看还是升级驱动更稳妥。
额外提示
如果你用的是Spring Boot项目,其实可以不用手动指定驱动版本,Spring Boot的父依赖会根据你引入的MySQL相关starter自动适配合适的驱动版本,确保版本兼容性。
内容的提问来源于stack exchange,提问作者Kiến Trần Trung
相关产品推荐
相关产品推荐

