最近我将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] 举报,一经查实,本站将立刻删除。