2016-05-08 4 views
0

Я пытаюсь вставить строку в mysql, используя Liquibase в приложении для загрузки весны. Что-то похожее на это:Liquibase mysql store newline

<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 правильно, так что я в конечном итоге, одну длинную строку в БД. Как я могу заставить липибазу вставлять новые строки?

Вот схема для таблицы Я пытаюсь вставить:

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

ответ

2

Попробуйте usind CDate в XML:

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

Спасибо, работал безупречно! :) –

+1

Просто чтобы добавить к этому ответу - причина такого поведения заключается в том, что в XML пробелы считаются несущественными, за исключением внутреннего блока CDATA. – SteveDonie

+0

Не только пробелы задают проблему. каждый специальный символ делает эту ошибку <>! .... –

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> 
+2

Хотя этот код может ответить на вопрос, дается дополнительный контекст относительно того, почему и/или как этот код отвечает на вопрос, высоко оценен. –

0

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

<column name="message"><![CDATA[ 
a 
b 
c 
d 
]]></column> 
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>