如何修复java.sql.SQLException:未知系统变量'transaction_isolation'错误?
解决java.sql.SQLException: Unknown system variable 'transaction_isolation'错误
问题场景
运行SpringBoot项目时抛出如下错误:
java.sql.SQLException: Unknown system variable 'transaction_isolation' at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130) ~[mysql-connector-j-8.0.33.jar:8.0.33] at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-j-8.0.33.jar:8.0.33] at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825) ~[mysql-connector-j-8.0.33.jar:8.0.33] at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:446) ~[mysql-connector-j-8.0.33.jar:8.0.33] at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239) ~[mysql-connector-j-8.0.33.jar:8.0.33] at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188) ~[mysql-connector-j-8.0.33.jar:8.0.33] at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-5.0.1.jar:na] at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) ~[HikariCP-5.0.1.jar:na] at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) ~[HikariCP-5.0.1.jar:na] at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) ~[HikariCP-5.0.1.jar:na] at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-5.0.1.jar:na]
环境为Manjaro系统,此前项目运行正常,未更新/移除MySQL、SpringBoot相关组件,调整依赖版本后问题仍存在。
解决方案
检查MySQL版本兼容性
该错误核心原因是MySQL服务器版本过低:transaction_isolation是MySQL 5.7及以上版本才支持的系统变量,5.6及以下版本使用的是tx_isolation。执行mysql -V查看服务器版本,若版本低于5.7,可选择:- 升级MySQL服务器至5.7+版本;
- 在JDBC连接URL中添加适配参数,指定使用旧版隔离级别变量,示例:
替换jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&sessionVariables=tx_isolation='READ-COMMITTED'your_db为实际数据库名,READ-COMMITTED为你的业务所需隔离级别。
验证MySQL系统变量
登录MySQL控制台,执行SHOW VARIABLES LIKE '%isolation%';,确认系统变量名称是transaction_isolation还是tx_isolation。如果是后者,说明服务器版本不支持新变量名,需按上述方法适配。调整JDBC驱动适配参数
若不想升级MySQL,可在JDBC URL中添加useLegacyDatetimeCode=false参数,强制驱动使用旧版变量名逻辑,避免触发新变量的查询:jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false清理连接池缓存
重启SpringBoot应用,清空HikariCP连接池的旧连接缓存,确保新的URL参数生效。
内容的提问来源于stack exchange,提问作者Permomo
相关产品推荐
相关产品推荐

