MariaDB 和 MySQL 是兼容的,但它们是不同的数据库。然而,由于历史原因(MariaDB 是 MySQL 的一个分支),它们之间具有高度的兼容性。
对于MariaDB,有两种常见的JDBC驱动选择:
使用 MariaDB 官方提供的 JDBC 驱动,其驱动类为 org.mariadb.jdbc.Driver,JDBC URL 格式通常以 jdbc:mariadb:// 开头。
使用 MySQL 的 JDBC 驱动(即 MySQL Connector/J),其驱动类为 com.mysql.jdbc.Driver(旧版本)
或 com.mysql.cj.jdbc.Driver(新版本),JDBC URL 格式为 jdbc:mysql://。
虽然 MariaDB 和 MySQL 协议兼容,但为了获得更好的兼容性和支持 MariaDB 特有的功能,建议使用 MariaDB 官方驱动。
但是,如果你使用 MySQL 驱动来连接 MariaDB,在大多数情况下也是可以工作的,因为 MariaDB 设计为与 MySQL 兼容。
不过,可能存在一些细微的差异,尤其是在新版本中。
因此,建议根据你使用的数据库来选择驱动:
如果使用 MariaDB,优先使用 MariaDB 驱动。
如果使用 MySQL,则使用 MySQL 驱动。

代码示例:
版本对应关系 MariaDB 10.1+ 建议使用 mariadb-java-client 2.7+ 最新版本推荐 3.0+ <dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> <version>3.3.3</version> </dependency>
//复制一个经典的 多库之动态管理数据库示例:
public static void main(String[] args) {
DruidPlugin druidPlugin = new DruidPlugin(
"jdbc:mariadb://localhost:3307/information_schema",
"root", "root").set(1, 1, 10);
ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
// 启动管理库
druidPlugin.start();
arp.start();
String name = "test_1";
// 建库
Db.update("CREATE DATABASE " + name);
// 启动业务库
DruidPlugin druidPluginTest = new DruidPlugin("jdbc:mariadb://localhost:3307/" + name,
"root", "root").set(1, 1, 10);
ActiveRecordPlugin arpTest = new ActiveRecordPlugin(name, druidPluginTest);
druidPluginTest.start();
arpTest.start();
// 建表
DbPro testDb = Db.use(name);
testDb.update(
"CREATE TABLE `a` ( `id` int NOT NULL AUTO_INCREMENT , `xx` varchar(255) NULL ,
PRIMARY KEY (`id`) ) ");
// 写入数据
testDb.update("INSERT INTO `a` (`xx`) VALUES ('xxxxx')");
// 查询
List<Record> list = testDb.find("SELECT * FROM `a` LIMIT 100");
System.out.println(list.toString());
druidPluginTest.stop();
druidPlugin.stop();
}

PS:我本机有安装 MySQL 与 MariaDB 双数据库,所以 MariaDB 端口改为了3307
MariaDB的核心优势:
| 对比维度 | MariaDB 的优势体现 |
|---|---|
| 开源与社区 | 更开放:由非营利的MariaDB基金会管理,承诺保持真正开源,社区驱动,开发更透明。 |
| 性能与扩展 | 存储引擎更丰富:默认包含Aria、ColumnStore、MyRocks等,针对不同场景优化。 查询优化更强:优化器更先进,支持并行复制,显著提升主从同步速度。 |
| 功能特性 | 功能更丰富:较早支持窗口函数、通用表表达式、WITH语句、INTERSECT/EXCEPT等。动态列:允许在NoSQL风格的单行中存储键值对。 |
| 安全性 | 权限更细化:支持更精细的权限控制,如基于表的列级权限。 默认更安全:安装后默认配置可能更严格。 |
| 兼容性与演进 | 高度兼容:作为MySQL的“直接替代品”设计,数据和客户端协议兼容,迁移成本低。 创新更快:版本迭代迅速,能更快引入新特性。 |
又水一篇~
