Liquibase MySQL存储换行符

3

我想在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插入换行符?

这是我尝试插入的表的模式:

<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>
4个回答

6

我尝试了以上所有答案,最终在liquibase社区论坛上找到了答案:

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

4
尝试在XML中使用CDATA:
    <column name="message" value="<![CDATA[
        a
        b
        c
        d
    ]]>"/>

1
只是为了补充一下这个答案 - 这种行为的原因是在XML中,空白被认为是不重要的,除非在CDATA块内部。 - SteveDonie
3
对我来说,这似乎行不通,我收到以下错误:liquibase:与“column”元素关联的属性“value”的值不能包含“<”字符。 - Jasper Lankhorst

0

对我来说起作用: <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>


0
<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>

3
虽然这段代码可能回答了问题,但提供有关为什么和/或如何回答问题的其他上下文会受到高度赞赏。 - morten.c

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接