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

Liquibase中如何为JSON类型列设置defaultValue?配置报错求助

解决Liquibase中JSON类型列添加默认值的引号冲突问题

在给JSON类型列设置默认值时,你遇到的报错是:

错误:此处不允许使用my_Num和my_Hex属性

这是因为XML中defaultValue属性用双引号包裹时,JSON数组里的双引号会被XML解析器误认为是属性值的结束标记,导致后续内容被当成非法XML属性。以下是几种解决方法:

方法1:用单引号包裹defaultValue属性值

直接将defaultValue的外层引号换成单引号,这样内部JSON的双引号就不会和XML属性的引号冲突:

<changeSet id="1691141490000-1" author="">
  <addColumn tableName="test">
    <column name="modules" type="json" defaultValue='["my_Num", "my_Hex"]'>
      <constraints nullable="false"/>
    </column>
  </addColumn>
</changeSet>

方法2:转义XML中的双引号

把JSON里的双引号替换为XML转义字符&quot;,确保XML解析器能正确识别完整的属性值:

<changeSet id="1691141490000-1" author="">
  <addColumn tableName="test">
    <column name="modules" type="json" defaultValue="&quot;[&quot;my_Num&quot;, &quot;my_Hex&quot;]&quot;">
      <constraints nullable="false"/>
    </column>
  </addColumn>
</changeSet>

方法3:使用数据库JSON函数(推荐)

如果你的数据库支持JSON构造函数,直接调用函数生成默认值,完全避免引号问题:

MySQL示例

<changeSet id="1691141490000-1" author="">
  <addColumn tableName="test">
    <column name="modules" type="json" defaultValueComputed="JSON_ARRAY('my_Num', 'my_Hex')">
      <constraints nullable="false"/>
    </column>
  </addColumn>
</changeSet>

PostgreSQL示例

<changeSet id="1691141490000-1" author="">
  <addColumn tableName="test">
    <column name="modules" type="json" defaultValueComputed="ARRAY_TO_JSON(ARRAY['my_Num', 'my_Hex'])">
      <constraints nullable="false"/>
    </column>
  </addColumn>
</changeSet>

内容的提问来源于stack exchange,提问作者Jake Morgan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:47:38