Liquibase mysql магазин новой строки

Я пытаюсь вставить строку в mysql, используя 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="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 должным образом, поэтому в итоге у меня есть одна длинная строка в db. Как я могу заставить 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>

person Lakatos Gyula    schedule 08.05.2016    source источник


Ответы (4)


Попробуйте использовать CDATA в XML:

    <column name="message" value="<![CDATA[
        a
        b
        c
        d
    ]]>"/>
person Bernd Buffen    schedule 08.05.2016
comment
Просто добавьте к этому ответу: причина такого поведения в том, что в XML пробелы считаются неважными, за исключением блока CDATA. - person SteveDonie; 09.05.2016
comment
У меня это не работает. Я получаю следующую ошибку: liquibase: значение атрибута, связанное со столбцом типа элемента, не должно содержать символ «‹». - person Jasper Lankhorst; 06.08.2017

Я пробовал все вышеперечисленные ответы, в конце концов я вижу ответ на форуме сообщества liquibase, в котором есть ответ:

<column name="message"><![CDATA[
a
b
c
d
]]></column>
person Jasper Lankhorst    schedule 06.08.2017

У меня работало: <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>

person Igor Mukhin    schedule 12.12.2017

person    schedule
comment
Хотя этот код может дать ответ на вопрос, предоставление дополнительного контекста относительно того, почему и/или как этот код отвечает на вопрос, приветствуется. - person morten.c; 13.03.2017