MariaDB / H2

MariaDB / H2总览对比

项目 H2 MariaDB
类型 嵌入式/内存关系数据库,Java编写 开源关系型数据库,MySQL分支
运行模式 内存模式、文件模式、服务模式 独立服务进程
适用场景 单元测试、开发环境、小工具演示、内嵌程序 生产业务库,高并发、大数据量
驱动类 org.h2.Driver org.mariadb.jdbc.Driver
JDBC URL 内存:jdbc:h2:mem:test;DB_CLOSE_DELAY=-1 文件:jdbc:h2:file:./data/db jdbc:mariadb://127.0.0.1:3306/dbname
兼容性 SQL接近MySQL,部分函数差异 高度兼容MySQL语法
优势 无需安装,随Java程序启动关闭;支持web控制台;速度快;零部署 稳定、事务、索引优化、主从复制、集群、大量运维工具
短板 不适合生产;并发能力弱;断电内存模式数据丢失;文件模式数据量有限 需要独立部署维护,占用资源

1. H2 Database

纯Java实现,最常用做单元测试内存数据库,SpringBoot内置支持。

三种运行模式

  1. 内存模式 mem 数据完全在内存,程序关闭数据丢失。

    spring.datasource.url=jdbc:h2:mem:demo;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE

DB_CLOSE_DELAY=-1:最后一个连接关闭不销毁数据库,单元测试必备。

  1. 文件模式 file 数据持久化到磁盘文件,程序重启数据保留。

    jdbc:h2:file:./h2data/mydb

  2. 服务模式 tcp H2作为独立服务,可以多进程远程连接,很少使用。

SpringBoot集成H2

pom依赖

复制代码
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

application.yml

复制代码
spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
    username: sa
    password:
  h2:
    console:
      enabled: true   # 开启web控制台 http://localhost:8080/h2-console
      path: /h2-console

H2注意坑点

  1. 内存模式:应用重启数据全部清空;
  2. 大小写、自增、部分mysql函数不兼容(find_in_setgroup_concat等行为不一样);
  3. 并发性能差,禁止生产使用
  4. web控制台不要暴露到公网;
  5. MyBatis‑Plus、JPA单元测试非常适合H2内存库。

典型用法:开发测试环境用H2,正式环境切换MariaDB/MySQL。


2. MariaDB

MySQL的开源分支,由原MySQL开发团队维护,绝大多数MySQL语法、驱动、配置几乎通用

Maven依赖

复制代码
<dependency>
    <groupId>org.mariadb.jdbc</groupId>
    <artifactId>mariadb‑java‑client</artifactId>
</dependency>

不要继续使用旧的mysql‑connector‑java,新项目优先mariadb驱动,也可以连接MySQL。

SpringBoot配置

复制代码
spring:
  datasource:
    driver-class-name: org.mariadb.jdbc.Driver
    url: jdbc:mariadb://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf8mb4&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456

关键特性

  1. 字符集优先 utf8mb4,支持完整emoji;mysql的utf8只是3字节;
  2. 支持主从复制、Galera集群;
  3. 存储引擎 InnoDB(默认,支持事务ACID,行锁);MyISAM不支持事务;
  4. 支持视图、存储过程、触发器、分区表;
  5. 向下兼容MySQL,迁移成本极低。

MariaDB vs MySQL小差异

  • 部分系统函数、系统表名字略有区别;
  • MariaDB有更多内置引擎;
  • 授权语法、索引语法大体一致;
  • 驱动包完全不一样,驱动类名不同。

生产最佳实践

  1. 必用InnoDB;
  2. 主键建议自增bigint;
  3. 避免大事务;
  4. 合理建立索引,避免回表;
  5. 开启慢查询日志优化SQL;
  6. 连接池配置(HikariCP):最大连接数不要设置过大。

3. H2 ↔ MariaDB 切换开发模式

很多项目配置两套profile:

  • dev:profile 使用H2内存库,不需要本地装数据库,跑单元测试、本地快速开发;
  • prod:profile 使用MariaDB生产数据库。

⚠️注意:SQL脚本要尽量兼容两者,否则切换会报错。H2对MySQL方言支持有限。

常见踩坑对比

场景 H2 MariaDB
自增主键 AUTO_INCREMENT 支持,但行为略有差异 AUTO_INCREMENT
分页 LIMIT offset,size 支持 LIMIT offset,size
函数 GROUP_CONCAT部分版本行为不同 完整支持GROUP_CONCAT
事务 支持,但并发弱 InnoDB完整事务、MVCC
DDL 部分语法不支持 完整DDL

4. HikariCP连接池搭配(SpringBoot默认)

不管H2还是MariaDB底层都是HikariCP。

复制代码
spring:
  datasource:
    hikari:
      maximum-pool-size: 10
      minimum-idle: 5
      idle-timeout: 300000
      connection-timeout: 30000

如果你需要,我可以补充:

  1. MyBatis‑Plus下H2+MariaDB多profile完整yml示例;
  2. H2兼容MySQL模式配置;
  3. MariaDB常用调优参数(my.cnf);
  4. H2单元测试标准模板。
相关推荐
承渊政道7 小时前
PostgreSQL 鸿蒙 PC 适配全记录:从原生交叉编译到 HNP 数据库服务闭环
数据库·postgresql·harmonyos·鸿蒙系统·pc端
风哥2号7 小时前
数据库教程FGMT26‑2-GoldenGate数据库容灾迁移02(OGG同构异构、数据库迁移、数据同步、容灾复制)
数据库·goldengate
牛油果子哥q8 小时前
向量数据库原理与工程选型:FAISS深度剖析、Milvus基础、检索优化、分片与持久化落地
数据库·milvus·faiss
海浪仙人掌8 小时前
流动比率有哪些分析陷阱?流动比率怎么避开这些陷阱?
大数据·数据库·人工智能
庆登登登8 小时前
MySQL Workbench 鸿蒙 PC 适配全记录:从 GTK_X11 桌面程序到 ArkUI 原生数据库工作台
数据库·mysql·harmonyos
2601_963282778 小时前
政企无线对讲系统落地:从设备采购到长期运维的完整工程实践
大数据·运维·数据库
熊文豪8 小时前
OceanBaseVS金仓:一条 SQL 的两条路——KingbaseES 的性能竞争力从哪来
数据库·sql·电科金仓
大模型码小白9 小时前
数据可视化:AI 生成 HTML5 动态交互式数据图表
前端·数据库·人工智能·深度学习·机器学习·信息可视化·html5
风哥2号9 小时前
数据库教程FGMT26‑1‑GoldenGate数据库容灾迁移01(OGG同构异构、数据库迁移、数据同步、容灾复制)
数据库·oracle
颜颜yan_9 小时前
Firebird 鸿蒙 PC 适配全记录:打通数据库内核、Qt 管理端与原生维护工具
数据库·qt·harmonyos