微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PostgreSQL将尾随零添加到数字

最近我将DB迁移到Postgresql,它有一些列定义为数字(9,3)和数字(9,4).在测试应用程序时,我发现当数据保存到这些列时,会在插入的值中添加尾随零.我正在使用Hibernate,我的日志显示为预准备语句构建的正确值.

我插入的数据示例在数字(9,3)列中为0.75,存储的值为0.750.数字(9,4)列的另一个示例:我插入值12,DB保持12.0000.

我发现了这个相关的问题:postgresql numeric type without trailing zeros.但它没有提供解决方案,除了引用9.x文档说没有添加尾随零.从这个问题,答案引用了文件(我也读过),其中说:

Numeric values are physically stored without any extra leading or
trailing zeroes. Thus,the declared precision and scale of a column
are maximums,not fixed allocations.

但是,就像那个问题海报一样,我看到添加了尾随零. Hibernate在日志中生成的原始插入不会显示这个额外的行李.所以我假设它是一个我没有正确设置的Postgresql,我只是找不到我是怎么弄错的.

如果指定精度和比例,Pg将填充到该精度和比例.
regress=> SELECT '0'::NUMERIC(8,4);
 numeric 
---------
  0.0000
(1 row)

没有办法把它关掉.它仍然是相同的数字,精度由类型而不是值定义.

如果要使用值定义的精度,则必须使用无约束数字:

regress=> SELECT '0'::NUMERIC,'0.0'::NUMERIC;
 numeric | numeric 
---------+---------
       0 |     0.0                                                                                                                                                             
(1 row)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐