MySQL 8.0 java.sql.SQLException Unknown system variable 'query_cache_size'
由于xxxxx,最近更新了MySQL版本到MySQL8.0,原本以为这只是一次普通的软件升级行为,可是当我跳到坑里的时候,我才意识到没那么简单。下面贴出错误描述。
【友情提示:不想看我废话的请直接到文章末尾查看解决方法】
详细信息:
严重 [http-nio-8080-exec-10] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [mvc-dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Cannot create PoolableConnectionFactory (Unknown system variable 'query_cache_size')
### The error may exist in config/mybatis/sqlXml/article.xml
### The error may involve org.devsong.dao.IArticle.getSiteMapData
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Cannot create PoolableConnectionFactory (Unknown system variable 'query_cache_size')] with root cause
java.sql.SQLException: Unknown system variable 'query_cache_size'
... ...
上面的错误看起来是不是很熟悉,没错,上面的错误在以前升级MySQL的时候,是由于数据库连接驱动版本过低,与数据库不匹配。这处理起来很简单,我也遇到过多次了,直接升级mysql-connector版本就行了。你如果在网上搜索上面的错误的话,绝大部分的解决方法也都是升级驱动。
想着已经非常眼熟这个异常了,于是我以一个老司机的姿态像往常一样更新了Maven依赖配置,像什么都没发生过一样重新部署了项目。嘀嘀嘀...错误代码500...我赶紧打开后台看异常信息,我的乖乖,怎么还是上面那个异常,明明更新了驱动的呀。。。至此老司机翻车。
我连滚带爬地打开代码,寻找着错误,看了一下Spring相关配置,没问题,看了一下数据库配置文件,没问题。于是我开始猜想是不是其他和数据库相关的东西也该升级了,就这样,我把数据库连接池、Spring-jdbc等能升级的都升级。想着异常一定能解决,于是我再一次部署了项目,内心忐忑的我再一次翻车:嘀嘀嘀...错误代码500。。。
连翻两次车之后,我决定放弃自己折腾了,老老实实去看文档。我搬出了常年不用的梯子,爬到了墙外,在一个角落里,我看到了某些东西:从MySQL8.0开始,已经支持将驱动写为com.mysql.cj.jdbc.Driver。在配置数据库连接的时候,需要加上时区配置。我抱着试一试的心态,修改了一下JDBC配置,在我以为又会失败时,嘀嘀嘀,成功。。。
下面是旧版配置和新版配置的对比:
#### 旧 版 ####
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root
#### 新 版 ####
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
jdbc.username=root
jdbc.password=root
网上说驱动写为com.mysql.jdbc.Driver 或者 com.mysql.cj.jdbc.Driver 都行,但我实际测试必须写为后者才行,并且serverTimezone的设置也不能少,二者缺一不可,少一个就翻车。
总结:
(1)更新驱动
(2)更改jdbc配置 --> driver名、serverTimezone
附:
你在折腾的时候或许重装过MySQL,如果你在卸载重装的过程中发现Windows服务中充斥着多个MySQL,想删除的话: Win + R >> CMD >> sc delete 服务名
转载于MySQL 8.0 java.sql.SQLException Unknown system variable 'query_cache_size'
本文来自博客园,作者:所遇所思,转载请注明原文链接:https://www.cnblogs.com/mynxg/p/14867957.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步