首页 > 解决方案 > 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

显然这是一个浮点错误,但如果我使用 Liquibase,为什么会给出不同的结果<sql>?结果不应该相同吗?

标签: javasqlpostgresqlliquibase

解决方案


如果您正在执行完全相同的 SQL 字符串,我会期望得到相同的结果。但是,您value作为变量提供,其类型由 Liquibase 处理,因此与包含数据库执行的数字文字的原始查询字符串相比,可能是 Liquibase 数字解析不同。

如果您要使用类似的东西:value: '0.99'with... SET test=concat('value=', CAST(value AS double precision))可能会给出相同的结果。


推荐阅读