Liquibase命令所产生的结果与直接在SQL中运行它的结果不同
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Liquibase命令所产生的结果与直接在SQL中运行它的结果不同相关的知识,希望对你有一定的参考价值。
我有下表:
id: BIGINT
value: DOUBLE
test: VARCHAR
带有值:
id: 1
value: 0.99
test: ''
在我的postgresql shell中运行以下SQL注释,与在Liquibase <sql>
标记中运行它得到的结果不同:
UPDATE myTable SET test=concat('value=', value);
[如果直接在SQL Shell中运行它,我得到的测试值将为value=0.99
,但是如果我在Liquibase <sql>
标记中运行相同的SQL命令,则会得到value=0.98999999999999999
显然这是一个浮点错误,但是如果我使用<sql>
,为什么Liquibase会给出不同的结果?结果不应该一样吗?
答案
如果您执行的是完全相同的SQL字符串,我期望得到相同的结果。但是,您提供value
作为其类型由Liquibase处理的变量,因此与包含数据库执行的数字文字的原始查询字符串相比,可能是Liquibase数字解析有所不同。
如果您使用类似的内容:value: '0.99'
和... SET test=concat('value=', CAST(value AS double precision))
可能会得到相同的结果。
以上是关于Liquibase命令所产生的结果与直接在SQL中运行它的结果不同的主要内容,如果未能解决你的问题,请参考以下文章