首批通过分布式安全可靠测评,为关键业务系统打造
不同客户端工具对数值计算的精度影响
更新时间:2026-06-03 03:01
本文主要介绍不同的客户端工具(obclient、sqlplus、ODC、DBeaver 等)对数据库中的数值计算的精度的影响。
问题现象
相同的数值计算表达式在不同模式的数据库下以及不同的客户端工具中返回的结果不一样。
OceanBase 数据库 OBClient 客户端中:

在原生 Oracle 11.2 中:

在 ODC SQL 窗口中:

在 DBeaver SQL窗口中:

之所以出现上述差异的根因是因为原生 MySQL/OceanBase MySQL 模式中除法的计算结果精度是固定的,而原生 Oracle/OceanBase Oracle 模式中除法的计算结果精度都是不固定的,最终展示的结果受客户端工具影响。
以原生 Oracle 11g 为例说明:

而 OceanBase Oracle 模式的行为表现基本跟原生 Oracle 相同,唯一不同点在于:目前 OBClient 客户端工具虽然支持设置 numwidth,但需要用户通过环境变量 export DISABLE_SET_NUM_WIDTH=0 来显式地启用下,默认是关闭的,即默认显示的是 observer 返回的完整结果:

影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
总结说明
综上所述,不同客户端下相同的计算表达式的结果不一样,主要是因为使用的客户端工具不一样导致的(DBeaver 应该有自己的 numwidth 精度设置),如果一直都在同一个客户端工具下执行(比如都是在 ODC SQL 窗口中查询),应该不会存在类似的结果差异。
适用版本
OceanBase 数据库 V2.x、V3.x、V4.x 版本。