You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

mariadb-java-client 2.2.3兼容MySQL 8.0吗?报错求解决方案

解决MariaDB JDBC驱动2.2.3连接MySQL 8.0.11时的tx_isolation异常问题

这个问题我之前也碰到过,本质是MariaDB JDBC驱动2.2.3版本还在使用MySQL 8.0.3+已经移除的tx_isolation系统变量,而MySQL 8.0.11完全不再支持这个变量了。下面给你几个可行的解决办法,按推荐优先级排序:

1. 升级MariaDB JDBC驱动版本(最推荐)

MariaDB在2.3.0及以上版本的驱动已经修复了这个兼容性问题,会自动适配MySQL 8.0使用的transaction_isolation变量。你只需要修改项目依赖:

如果是Maven项目,更新pom.xml中的依赖:

<dependency>
    <groupId>org.mariadb.jdbc</groupId>
    <artifactId>mariadb-java-client</artifactId>
    <version>2.3.0</version> <!-- 或更高稳定版本,比如2.7.5 -->
</dependency>

如果是Gradle项目,更新build.gradle:

implementation 'org.mariadb.jdbc:mariadb-java-client:2.3.0'

这个方案最彻底,后续也能避免其他潜在的兼容性问题,而且2.3.0版本和Spring Boot 2.0.2完全兼容。

2. 临时 workaround:修改JDBC连接参数

如果暂时没法升级驱动,可以在JDBC URL中添加参数,强制驱动使用新的事务隔离变量:

jdbc:mariadb://localhost:3306/your_database?useLegacyDatetimeCode=false&sessionVariables=transaction_isolation='READ-COMMITTED'

这里的READ-COMMITTED可以替换成你实际需要的事务隔离级别(比如REPEATABLE-READ),这个参数会在连接初始化时设置正确的系统变量,绕过驱动对旧变量的读取。

3. 替换为MySQL官方JDBC驱动

如果你不想继续使用MariaDB的驱动,也可以换成MySQL官方的mysql-connector-java,Spring Boot 2.0.2对这个驱动的8.0版本支持很好:

Maven依赖:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.11</version> <!-- 和你的MySQL版本匹配 -->
</dependency>

同时记得把JDBC URL改成mysql协议开头,并且添加时区参数:

jdbc:mysql://localhost:3306/your_database?serverTimezone=UTC&useSSL=false

补充说明

MySQL 8.0.3的更新中正式移除了tx_isolation变量,改用transaction_isolation(还有对应的transaction_read_only),老版本的MariaDB驱动没有做版本适配,还是尝试读取旧变量名,所以触发了这个SQLException。升级驱动是长远来看最稳妥的方案,建议优先选择。

内容的提问来源于stack exchange,提问作者Joseph Madden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:59:12