web-dev-qa-db-ja.com

LiquibaseがBIT列、MySQL、列に対して長すぎるデータに挿入する

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)列に挿入する正しい方法は何ですか?

20
dustin.schultz

投稿してすぐに気づいた私の質問への回答。 BIT(1)列に挿入するには、値をvalueBooleanとして定義する必要があります

<insert>
   <column name="active" valueBoolean="true"/>
</insert>
31
dustin.schultz

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

ここに上陸した他の人々がこれに問題を抱えているのを助けることを願っています。

12
user436357

私の場合、挿入ではなくloadDataを使用していたため、以下を使用する必要がありました。

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