Liquibase插入到BIT列,MySQL,数据太长了列

时间:2015-07-06 18:08:17

标签: java liquibase

在Liquibase中,我定义了一个包含BIT(1)

类型列的表
<changeSet author="foobar" id="create-configuration-table">
    <createTable tableName="configuration">
        <column autoIncrement="true" name="id" type="BIGINT(19)">
            <constraints primaryKey="true" />
        </column>
        <column name="active" type="BIT(1)" />
        <column name="version" type="INT(10)" />
    </createTable>
</changeSet>

在随后的变更集中,我想在此表中插入数据,但是,当将数据插入BIT(1)类型的“活动”列时,MySQL会抱怨'数据截断:数据太长了列'

我试过了:

<insert>
   <column name="active" value="1" type="BIT(1)" />
</insert>

<insert>
   <column name="active" value="1"/>
</insert>

<insert>
   <column name="active" value="TRUE" type="BOOLEAN"/>
</insert>

插入BIT(1)列的正确方法是什么?

4 个答案:

答案 0 :(得分:30)

回答我自己的问题,因为我在发布之后就发现了这个问题。要插入BIT(1)列,您需要将值定义为valueBoolean

<insert>
   <column name="active" valueBoolean="true"/>
</insert>

答案 1 :(得分:12)

使用<loadData>从csv文件加载每个表的记录时会出现类似情况。 在<loadData>元素中,您必须为表中的每个布尔列显式指定类型:

<loadData encoding="UTF-8"
          file="path/to/file.csv"
          separator=","
          tableName="MY_TABLE"
>
    <!-- specify that values in my_boolean_column should be interpreted as Boolean values -->
    <column name="my_boolean_column" type="BOOLEAN" />
</loadData>

希望它能帮助其他在这里遇到麻烦的人。

答案 2 :(得分:3)

就我而言,我使用的是loadData而不是insert,我不得不使用以下内容:

<column name="active" type="boolean"/>

答案 3 :(得分:-1)

在我与MariaDB的情况下,它必须是:

<column name="show_in_app_directory" type="bit" valueBoolean="true" />

退出&#39;输入=&#34; bit&#34;&#39;正如dustin.schultz所建议我得到Liquibase验证错误:

column 'type' is required for all columns