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

如何为MySQL与H2数据库维护共用的Flyway迁移文件?

共用Flyway迁移文件适配MySQL与H2的方案

完全可以维护一套共用的Flyway迁移文件,但需要处理两种数据库的语法差异——你遇到的错误就是典型的语法不兼容问题。

先解决当前的MySQL语法错误

错误提示里的DATA TYPE TEXT是H2特有的写法,MySQL不支持该语法。只需将迁移文件中类似column_name DATA TYPE TEXT的语句,改为MySQL兼容的column_name TEXT即可解决这个问题。

共用迁移文件的通用方案

1. 优先使用MySQL兼容语法

你的H2配置已经添加了MODE=MYSQL,这会让H2模拟MySQL的语法行为,绝大多数MySQL的语法在H2中都能正常运行。编写迁移文件时直接采用MySQL的语法规范:

  • 自增主键用AUTO_INCREMENT(H2在MySQL模式下支持),不用H2的IDENTITY
  • 字符串类型用VARCHAR(n)或TEXT,避免H2独有的VARCHAR_IGNORECASE
  • 日期类型用DATETIME或TIMESTAMP,保持与MySQL一致

2. 用Flyway的数据库条件注释处理差异

如果遇到少数无法兼容的语法,可以用Flyway的数据库特定注释区分:

CREATE TABLE shipment (
    id INT AUTO_INCREMENT PRIMARY KEY,
    /*mysql*/ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    /*h2*/ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Flyway会根据当前连接的数据库,自动识别并执行对应注释块内的SQL。

3. 优化配置路径

你当前的Flyway配置spring.flyway.locations = h2/db/migration带有H2标识,建议改为通用路径,比如:

spring.flyway.locations = classpath:db/migration

这样无论使用MySQL还是H2,都能读取同一套迁移文件。

内容的提问来源于stack exchange,提问作者Bala Velan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 03:22:06