【数据库使用】 extra_float_digits导致的double类型模糊匹配错误

举报
超人来了 发表于 2025/10/25 17:32:11 2025/10/25
【摘要】 问题背景:select * from schema.tablename where  double::text like '%114.0061705';查询结果为空,但实际有符合条件的数据。根因:double类型的数值,在进行模糊查询时,由于extra_float_digits导致精度不一致,结果集出现误差。 extra_float_digits参数说明:调整浮点值显示的数据位数,浮点类型包...

问题背景:

select * from schema.tablename where  double::text like '%114.0061705';

查询结果为空,但实际有符合条件的数据。

根因:

double类型的数值,在进行模糊查询时,由于extra_float_digits导致精度不一致,结果集出现误差。

 

extra_float_digits

参数说明:调整浮点值显示的数据位数,浮点类型包括float4、float8 以及几何数据类型。参数值加在标准的数据位数上(FLT_DIG或DBL_DIG中合适的)。

参数类型:USERSET

取值范围:整型,-15~3

说明:
  • 设置为3,表示包括部分有效的数据位。对转储需要精确恢复的浮点数据尤其有用。
  • 设置为负数,表示摒弃不需要的数据位。

默认值:0

 

通过JDBC进行连接DWS时,需要注意。

连接参数

第三方工具通过JDBC连接时,JDBC向DWS发起连接请求,会默认添加以下配置参数,详见JDBC代码ConnectionFactoryImpl类的实现。

params = {
{ "user", user },
{ "database", database },
{ "client_encoding", "UTF8" },
{ "DateStyle", "ISO" },
{ "extra_float_digits", "3" },
{ "TimeZone", createPostgresTimeZone() },
};

这些参数可能会导致JDBC客户端的行为与gsql客户端的行为不一致,例如,Date数据显示方式、浮点数精度表示、timezone显示。
如果实际期望和这些配置不符,建议在java连接设置代码中显式设定这些参数。
通过JDBC连接数据库时,会设置extra_float_digits=3,DWS中设置为extra_float_digits=0,可能会造成同一条数据在JDBC显示和gsql显示的精度不同。
对于精度敏感的场景,建议使用numeric类型。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。