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
相关产品推荐
相关产品推荐

