Liquibase 插入 BIT 列,MySQL,列数据太长
Liquibase inserting into BIT column, MySQL, data too long for column
在 Liquibase 中,我用 BIT(1)
类型的列定义了一个 table
<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>
在随后的变更集中,我想将数据插入此 table,但是,当将数据插入 BIT(1) 类型的 'active' 列时,MySQL 抱怨 'Data truncation: Data too long for column'
我试过:
<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) 列的正确方法是什么?
回答我自己的问题,因为我在发布后立即想到了这个问题。要插入 BIT(1) 列,您需要将值定义为 valueBoolean
<insert>
<column name="active" valueBoolean="true"/>
</insert>
在我的例子中,我使用的是 loadData 而不是 insert,我必须使用以下内容:
<column name="active" type="boolean"/>
使用 <loadData>
从 csv 文件中加载每个 table 的记录时也有类似的情况。
在 <loadData>
元素中,您必须为 table:
中的每个布尔列明确指定类型
<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>
希望它能帮助遇到此问题的其他人。
在我使用 MariaDB 的情况下,它必须是:
<column name="show_in_app_directory" type="bit" valueBoolean="true" />
按照 dustin.schultz 的建议省略 'type="bit"' 我收到 Liquibase 验证错误:
column 'type' is required for all columns
在 Liquibase 中,我用 BIT(1)
类型的列定义了一个 table<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>
在随后的变更集中,我想将数据插入此 table,但是,当将数据插入 BIT(1) 类型的 'active' 列时,MySQL 抱怨 'Data truncation: Data too long for column'
我试过:
<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) 列的正确方法是什么?
回答我自己的问题,因为我在发布后立即想到了这个问题。要插入 BIT(1) 列,您需要将值定义为 valueBoolean
<insert>
<column name="active" valueBoolean="true"/>
</insert>
在我的例子中,我使用的是 loadData 而不是 insert,我必须使用以下内容:
<column name="active" type="boolean"/>
使用 <loadData>
从 csv 文件中加载每个 table 的记录时也有类似的情况。
在 <loadData>
元素中,您必须为 table:
<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>
希望它能帮助遇到此问题的其他人。
在我使用 MariaDB 的情况下,它必须是:
<column name="show_in_app_directory" type="bit" valueBoolean="true" />
按照 dustin.schultz 的建议省略 'type="bit"' 我收到 Liquibase 验证错误:
column 'type' is required for all columns