首页 > 解决方案 > Liquibase 3.8 用引号插入 tinyint 值

问题描述

我正在尝试使用 liquibase 脚本将值插入 mysql:

<changeSet author="liquibase" id="6225">
    <insert tableName="master">
        <column name="id" value="7"/>
        <column name="insightname" value="topic_modelling"/>
        <column name="insighttype" value="1" valueBoolean="true"/>
    </insert>
</changeSet>

但是当我尝试这个时,它给了我错误:

错误:数据截断:第 1 行的列 'insighttype' 的数据太长 [失败的 SQL:INSERT INTO db.master(id、insightname、insighttype)值('7'、'topic_modelling'、'1')]

是因为值是用引号传递的吗?解决办法是什么?

我的 Create table 语句如下所示:

CREATE TABLE ss_insightmaster (
  id int(11) NOT NULL AUTO_INCREMENT,
  insightname varchar(255) NOT NULL,
  enabled tinyint(1) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

标签: mysqlliquibase

解决方案


每个数据库都以不同的方式处理布尔值 - Liquibase 期望的不是insighttype类型,因为您使用的是 MySQL,正如您在 liquibase github中看到的那样。BITTINYINT

或者

作为一个肮脏的黑客,您可以在预期dbmsa 的地方运行变更集:NUMBER

<changeSet author="liquibase" id="6225" dbms="oracle">
    <insert tableName="master">
        <column name="id" value="7"/>
        <column name="insightname" value="topic_modelling"/>
        <column name="insighttype" value="1" valueBoolean="true"/>
    </insert>
</changeSet>

推荐阅读