Liquibase mysql 存储换行符

Liquibase mysql store newline

我尝试在 spring-boot 应用程序中使用 liquibase 在 mysql 中插入一行。类似于此:

<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.9"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.9
                      http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.9.xsd">
    <changeSet author="laxika" id="20160508-2">
        <insert tableName="news">
            <column name="title" value="Hello world"/>
            <column name="release_date" value="2016-05-09 00:00:00"/>
            <column name="icon" value="update"/>
            <column name="message" value="
                a
                b
                c
                d
            "/>
        </insert>
    </changeSet>
</databaseChangeLog>

出于某种奇怪的原因,liquibase 没有正确地向 sql 添加换行符,所以我最终在数据库中得到了一个长字符串。如何强制 liquibase 插入换行符?

这是我要插入的 table 的架构:

<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.9"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.9
                      http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.9.xsd">
    <changeSet author="laxika" id="20150922-4">
        <createTable tableName="news">
            <column name="id" type="smallint unsigned" autoIncrement="true">
                <constraints primaryKey="true" nullable="false" />
            </column>
            <column name="release_date" type="date">
                <constraints nullable="false" />
            </column>
            <column name="title" type="varchar(256)">
                <constraints nullable="false" />
            </column>
            <column name="message" type="varchar(2048)">
                <constraints nullable="false" />
            </column>
            <column name="icon" type="varchar(32)">
                <constraints nullable="false" />
            </column>
        </createTable>
        <modifySql>
            <append value="ENGINE=INNODB DEFAULT CHARSET=utf8"/>
        </modifySql>
    </changeSet>
</databaseChangeLog>

尝试在 XML 中使用 CDATA:

    <column name="message" value="<![CDATA[
        a
        b
        c
        d
    ]]>"/>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.9"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.9
                      http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.9.xsd">
    <changeSet author="laxika" id="20160508-2">
        <insert tableName="news">
            <column name="title" value="Hello world"/>
            <column name="release_date" value="2016-05-09 00:00:00"/>
            <column name="icon" value="update"/>
            <column name="message" valueComputed="(SELECT '\na\nb\nc\nd\n' from dual)"/>
        </insert>
    </changeSet>
</databaseChangeLog>

上面的答案我都试过了,最后在liquibase的社区论坛上看到了一个答案:

<column name="message"><![CDATA[
a
b
c
d
]]></column>

为我工作: <insert tableName="AUDIT_ATTR"> <column name="AUDIT_ID" valueNumeric="601"/> <column name="KEY" value="FINDINGS_IN_CATEGORY_NCW_TEXT"/> <column name="VALUE"> tra1 la2 la3 </column> </insert>