处理将 MySQL 布尔类型从 tinyint 更改为 bit 的 liquibase 升级

Posted

技术标签:

【中文标题】处理将 MySQL 布尔类型从 tinyint 更改为 bit 的 liquibase 升级【英文标题】:dealing with liquibase upgrade that changed MySQL boolean type from tinyint to bit 【发布时间】:2014-09-16 16:26:52 【问题描述】:

我正在尝试将 Liquibase 从 2.0.5 升级到 3.2.2。 Liquibase 3.2.2 已将 mysql 的布尔类型实现从 tinytint(1) 更改为 bit(1)。这打破了我们的许多历史变更集,例如在我们设置默认值的地方,如下所示:default="1"(失败并出现错误 Data truncation: Data too long for column in MySQL 5.6.16)。

与其重写/修复大量变更集历史记录,我正在寻找一种更简单的方法来处理它,以便我们可以升级。我不反对告诉 Liquibase 继续为 mysql 使用 tinyint(1)。我在用户论坛中看到了关于扩展 liquibase.database.typeconversion.core.MySQLTypeConverter 来完成它的注释,但该机制在 3.2.2 中似乎不可用。

知道我如何告诉 Liquibase 3.2.2 继续使用 tinyint(1) 吗?如果做不到这一点,关于如何在不重写变更集历史记录的情况下处理这个问题的任何其他想法?

【问题讨论】:

【参考方案1】:

在 3.2.2 中,TypeConverterLogic 已移至特定于类型的类。因此,您可以覆盖 liquibase.datatype.core.BooleanType 和 toDatabaseDataType() 方法以返回 TINYINT(1) 而不是 BIT(1)

【讨论】:

在 liquibase 网站上有没有关于如何做到这一点的文档?我找不到太多东西,我想从旧版本的 Liquibase 升级,最好保留 TINYINT,而不必转换所有旧的更改集。 MySQL 位处理仍然使这些痛苦。

以上是关于处理将 MySQL 布尔类型从 tinyint 更改为 bit 的 liquibase 升级的主要内容,如果未能解决你的问题,请参考以下文章

mysql 数据库中的布尔字段

MySQL数据库之数据类型BOOL/BOOLEAN与TINYINT测试总结

为啥 MySQL 将布尔值解释为 TINYINT(1) 而不是 BIT(1)?

如何将 Postgresql 布尔值转换为 MySQL Tinyint?

用于存储布尔值的 MySQL 数据类型

用于存储布尔值的 MySQL 数据类型