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转义字符",确保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>
方法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
相关产品推荐
相关产品推荐

