liquibase新增字段注释导致表格注释同时变更bug记录
2024-10-19 11:42:00
liquibase是一个用于数据库变更跟踪、版本管理和自动部署的开源工具。它的使用方式方法可以参考官方文档或者其他人的博客,这里不做过多介绍。
1. 问题复现
在使用过程中发现了一个版本bug。这个bug是这样的:
当我向用户表 ts_user 增加一个字段(比如身高: height )时,我在 ts_user.xml 中填入:
<changeSet id="ts_user_02" author="lunyu">
<addColumn tableName="ts_user">
<column name="height" type="decimal(4,1)" remarks="身高(单位厘米)" afterColumn="phone_no"/>
</addColumn>
</changeSet>
当我重启项目时,日志中就发现liquibase执行了相关语句。
liquibase.executor.jvm.JdbcExecutor - ALTER TABLE mybatis_db.ts_user ADD height DECIMAL(4, 1) NULL COMMENT '身高(单位厘米)' AFTER `phone_no`
liquibase.executor.jvm.JdbcExecutor - ALTER TABLE mybatis_db.ts_user COMMENT = '身高(单位厘米)'
liquibase.changelog.ChangeSet - Columns height(decimal(4,1)) added to ts_user
liquibase.changelog.ChangeSet - ChangeSet classpath:liquibase/changelog/sys/ts_user.xml::ts_user_02::lunyu ran successfully in 728ms
这时就发现在创建了新增了身高( height )这个字段后,liquibase莫名其妙地又给变更了一下用户( ts_user )表的注解(comment),于是我用数据库连接工具查看,用户表变成了这样:
CREATE TABLE `ts_user` (
`id` VARCHAR(32) NOT NULL COLLATE 'utf8_unicode_ci',
`login_name` VARCHAR(50) NULL DEFAULT NULL COMMENT '登录名' COLLATE 'utf8_unicode_ci',
`real_name` VARCHAR(50) NULL DEFAULT NULL COMMENT '真实姓名' COLLATE 'utf8_unicode_ci',
`ident_no` VARCHAR(18) NULL DEFAULT NULL COMMENT '身份证号' COLLATE 'utf8_unicode_ci',
`phone_no` VARCHAR(11) NULL DEFAULT NULL COMMENT '手机号' COLLATE 'utf8_unicode_ci',
`height` DECIMAL(4,1) NULL DEFAULT NULL COMMENT '身高(单位厘米)',
`version` INT(11) NOT NULL DEFAULT '0' COMMENT '版本',
`deleted` BIT(1) NOT NULL DEFAULT 'b\'0\'' COMMENT '是否删除',
`created_by` VARCHAR(32) NOT NULL DEFAULT '-1' COMMENT '创建人' COLLATE 'utf8_unicode_ci',
`created_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_by` VARCHAR(32) NULL DEFAULT NULL COMMENT '更新人' COLLATE 'utf8_unicode_ci',
`updated_time` DATETIME NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
)
COMMENT='身高(单位厘米)'
COLLATE='utf8_unicode_ci'
ENGINE=InnoDB
;
很明显表注解这样的变更,影响了表的含义。
2. 问题解决
问题解决很简单,替换liquibase的版本。出问题的版本是3.8.9版本,把这个版本降低,使用3.6.3版本。不清楚高版本的liquibase为什么会出现这样的设计,至少我找了一圈没有找到可配置项用于消解这个问题。
使用3.6.3版本liquibase再次执行上面的步骤,执行效果如下,问题解决。
liquibase.executor.jvm.JdbcExecutor - ALTER TABLE mybatis_db.ts_user ADD height DECIMAL(4, 1) NULL COMMENT '身高(单位厘米)' AFTER `phone_no`
liquibase.changelog.ChangeSet - Columns height(decimal(4,1)) added to ts_user
liquibase.changelog.ChangeSet - ChangeSet classpath:liquibase/changelog/sys/ts_user.xml::ts_user_02::lunyu ran successfully in 1445ms
最新文章
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(30)-本地化(多语言)
- json相关的一些用法
- TortoiseSVN文件夹及文件图标不显示解决方法
- phpstorm的安装、破解、和汉化
- java.util.concurrent Class ThreadPoolExecutor
- hdu4185解题报告
- Bezier曲线的原理 及 二次Bezier曲线的实现
- cocos2d_随手篇1_关于ccTouchBegan的调用
- Why your Games are Unfinished, and What To Do About It (转)
- 1002: [FJOI2007]轮状病毒
- Java排序算法之归并排序
- ASP.NET Core 运行原理解剖[1]:Hosting
- java ---日期的格式化
- 设计模式 -->; (17)状态模式
- IT企业级应⽤开发模式演化
- IDEA的Maxcomputer Studio开发
- 2190: [SDOI2008]仪仗队
- Sqlite文件在ubunut的查看
- Docker概念学习系列之Docker的主要目标(2)
- Vue---父子组件之间的通信