【问题标题】:Liquibase 3.8 inserts tinyint value with quotesLiquibase 3.8 用引号插入 tinyint 值
【发布时间】:2020-02-17 07:26:09
【问题描述】:

我正在尝试使用 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>

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

错误:数据截断:行中“insighttype”列的数据太长 1 [失败的SQL:插入到db.master(id, insightname, insighttype) VALUES ('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;

【问题讨论】:

  • 您能否加入 SHOW CREATE TABLE db.master 以确保我们正确理解这些类型?
  • @danblack - 添加了 CREATE TABLE 语句。

标签: mysql liquibase


【解决方案1】:

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

作为一个肮脏的黑客,您可以使用另一个 dbms 运行变更集,其中应该是 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 2017-07-10
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多