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

Liquibase报未知数据类型JSON异常问题咨询

解决JHipster + MySQL JSON列导致Liquibase打包失败的问题

我之前也碰到过一模一样的坑——本地运行正常,但打包时Liquibase就不认MySQL的JSON类型。核心问题是Liquibase默认会做跨数据库兼容处理,直接写JSON类型它没法识别是MySQL专属的类型,咱们按下面的步骤来修复:

1. 修正Liquibase变更集的列定义

重点改你提到的20180410012441_added_entity_Ability.xml文件里的JSON列配置,这里给你两个方案:

方案A:仅适配MySQL(适合单数据库场景)

直接给<column>标签加上dbms="mysql"属性,明确告诉Liquibase这是MySQL专属的类型:

<column name="abilities" dbms="mysql" type="JSON">
    <constraints nullable="true"/>
    <!-- 其他属性比如defaultValue等按需添加 -->
</column>

方案B:兼容H2测试环境(推荐,JHipster默认用H2做单元测试)

H2对JSON类型的支持和MySQL有差异,咱们用modifySql动态替换类型,让测试和生产环境都能正常工作:

<column name="abilities" type="TEXT">
    <constraints nullable="true"/>
    <modifySql dbms="mysql">
        <replace pattern="TEXT" replacement="JSON"/>
    </modifySql>
</column>

这样本地测试时H2会用TEXT存储,生产环境MySQL自动替换成JSON类型,两全其美。

2. 确认MySQL驱动版本

检查pom.xml里的MySQL驱动版本,确保它支持MySQL 5.7的JSON类型,推荐用5.1.46及以上版本:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.49</version>
    <scope>runtime</scope>
</dependency>

3. 本地验证变更集

先别急着打包,先执行本地Liquibase更新,确认变更集没问题:

./mvnw liquibase:update

如果这个命令能顺利跑完,说明变更集的问题已经解决了。

4. 重新打包构建Docker镜像

现在再执行你的打包命令:

./mvnw package -Pprod dockerfile:build

这次应该不会再抛出unknown data type 'JSON'的异常了。

内容的提问来源于stack exchange,提问作者James Hao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:47:03