【问题标题】:DB2 JDBC Driver Truncates DecimalDB2 JDBC 驱动程序截断十进制
【发布时间】:2013-04-09 23:59:09
【问题描述】:

DB2 的 JDBC 驱动程序似乎正在截断数字/十进制字段的精度。我在 SALES 表中定义了以下字段:

十进制数(16,16)

然后我执行以下插入语句:

插入销售额(金额)值 (14.12345678)

如果我使用 DB2 控制中心中的查询工具进行查询,我会得到 14.1234567800000000。

如果我使用 Squirrel(一个使用 DB2 的 JDBC 驱动程序连接到数据库的 DB 客户端,我得到 14.12346。当我使用 Hibernate 从 Java 代码执行相同操作时也会发生同样的情况。

这让我相信 JDBC 驱动程序正在截断结果的精度。有没有办法用选项来配置 JDBC 驱动程序来防止这种情况发生?我已经看到了 JDBC 驱动程序的 JDBC 选项,但似乎没有一个描述影响这一点的选项。

【问题讨论】:

  • DECIMAL(16,16) 有点奇怪,14.1234567890123456 不适合(至少 a 应该是 DECIMAL(18,16))。
  • 马克和纳扬是对的。该值不能适合 DB2 中的 DECIMAL(16,16) 列。 DECIMAL(16,16) 小数点左侧没有数字。俗话说,你不能把 10 磅的____装进一个 5 磅的袋子里。也许你在这里打错了?
  • 是的。我实际上误解并认为精度在小数点之前和小数点之后。我们实际的数据库表有 DECIMAL(19,8)。指定比例和精度后,它可以正常工作。

标签: hibernate jdbc db2


【解决方案1】:

如果记录被正确插入到数据库中,那么在获取时,它可能会被隐式格式化/截断。

我在使用 Toad for Oracle 检索记录时遇到了类似问题。然后我手动配置了首选项以使其正确显示,但对 DB2 不熟悉。

您可以尝试在列定义中进行配置。 @Column(precision=16, scale=8) 用于 BigDecimal 字段。

precision :小数(精确数字)列的精度。 (仅在使用小数列时适用。)

scale :小数(精确数字)列的比例。 (仅在使用小数列时适用。)

精度是总位数,比例是小数点右边的位数。尝试更改它们的值,目前似乎不合适。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    相关资源
    最近更新 更多