【发布时间】:2014-11-13 23:06:56
【问题描述】:
最近我将一个 DB 迁移到 PostgreSQL,其中一些列定义为 numeric(9,3) 和 numeric(9,4)。在测试应用程序时,我发现当数据保存到这些列时,插入的值中会添加尾随零。我正在使用 Hibernate,我的日志显示为准备好的语句构建的正确值。
我插入的数据示例是 0.75 在 numeric(9,3) 列中,存储的值是 0.750。 numeric(9,4) 列的另一个示例:我插入值 12 并且数据库持有 12.0000。
我发现了这个相关问题:postgresql numeric type without trailing zeros。但除了引用 9.x 文档说不添加尾随零之外,它没有提供解决方案。从那个问题,答案引用了文档(我也读过)说:
数值是物理存储的,没有任何额外的前导或 尾随零。因此,列的声明精度和比例 是最大值,而不是固定分配。
但是,就像那个问题海报一样,我看到添加了尾随零。 Hibernate 在日志中生成的原始插入没有显示这个额外的包袱。所以我假设这是一个我没有正确设置的 PostgreSQL 东西,我只是找不到我是怎么弄错的。
【问题讨论】:
-
您看到零的客户端是什么?你试过 psql 吗?
-
这是一个网络应用程序,我使用 Firefox 作为我的浏览器。应用服务器是使用 Hibernate 的 Java。带有尾随零的“修改”值在实际数据库记录中可见(并在查询时以这种方式返回给客户端)。
-
在实际数据库记录中可见是什么意思?客户向您展示了什么?我已经问过了,你没有回答:你试过 psql 了吗?
-
是的,我确实尝试了一个 psql 查询,结果相同。由于我支持的应用程序使用 Java 和 Hibernate,所以这是我需要的组合。通过“在实际数据库记录中可见”,我指的是使用工具(在我的情况下为 pgAdmin3)查看时表中的内容。当您想要查看/编辑数据时,pgAdmin3 显示尾随零作为它执行的查询的结果......这就是 Web 浏览器显示来自服务器的内容。
标签: postgresql padding numeric