Liquibase - 校验和因不同的数据库供应商而异
Posted
技术标签:
【中文标题】Liquibase - 校验和因不同的数据库供应商而异【英文标题】:Liquibase - checksum differs with different database vendors 【发布时间】:2014-11-13 17:40:11 【问题描述】:当我尝试在 MSSQL 和 mysql 上运行 Liquibase 校验和时遇到问题。
在我的 MSSQL 库中,我有一个带有此校验和的更改日志条目:
3:cf2f5de7a1dcc738bbc185e25fbcf6c9
当我针对这个数据库运行我的 liquibase 时,它工作得很好。
然后,我将更改日志条目复制到我的 MySQL 数据库并尝试运行,并收到此错误:
myLiquibase.xml::1::Tobb is now: 3:cedf7a8ba54ea3f83141f79
我尝试在我的 MSSQL 中将校验和设置为 null
以重新生成校验和,然后校验和恢复为
3:cf2f5de7a1dcc738bbc185e25fbcf6c9
当在 MySQL 中做同样的事情时,我得到了这个校验和:
3:cedf7a8ba54ea3f83141f7987007deb7
因此,据我所知,根据它是在 MSSQL 还是 MySQL 中运行,Liquibase 会生成不同的校验和。这怎么可能发生?我以为校验和只取决于 liquibase-script 的实际内容?
【问题讨论】:
【参考方案1】:是的,它取决于内容和 DB 类型,因为实际上校验和不取决于您的 changeset
文本,而是取决于为当前 DB 生成的 sql,它不同的数据库会略有不同。
如果你想避免校验和错误,你可以在变更集中使用validCheckSum
标签。
【讨论】:
我明白了,但是validCheckSum
会一起禁用校验和检查吗?知道脚本已在其当前状态下运行,它将消除一些安全性..【参考方案2】:
校验和实际上是根据变更集文本的规范化版本计算的,而不是 SQL,并且应该与数据库类型无关。
您是否针对不同的数据库在不同的操作系统版本上运行?
【讨论】:
MySQL 正在本地运行,在 Windows7 64 位上。 MSSQL 在 Windows Server 2008 R2 上运行。我们使用的是 Liquibase 2.0.1 版。可能是因为覆盖了数据类型? 谢谢,Windows 7 vs. 2008r2 不应该影响校验和。你如何覆盖数据类型?只是允许 liquibase 像往常一样转换它们,还是使用更改日志参数? 我们使用的是 modifySql-element:<modifySql dbms="mysql"> <replace replace="NUMBER(19,0)" with="bigint(20)"/> </modifySql>
好的。我不记得这如何影响 2.0 中的校验和,但可能是问题所在。如果您像@Andremoniy 建议的那样使用 以上是关于Liquibase - 校验和因不同的数据库供应商而异的主要内容,如果未能解决你的问题,请参考以下文章
Liquibase 和 Spring 如何使用单独的用户进行架构更改