Oracle中Number(38,127)、Number、Number(*)与Number(*,127)的区别
Oracle NUMBER四种定义的具体差异
核心规则前提
Oracle NUMBER类型的定点/浮点特性,核心取决于是否显式指定固定的scale:显式指定scale时为定点数,严格遵循位数限制;未指定scale时为动态浮点数,仅限制总有效位数。
NUMBER(38,127)
这是显式指定精度(precision=38,总有效位数上限)和小数位(scale=127,小数点右侧最多保留127位有效数字)的定点数类型。对于1e-130(即小数点后129个0加1),其有效小数位在第130位,超出了scale=127的限制,因此会被截断为0。NUMBER(*,127)*代表precision取默认最大值38,其余逻辑和NUMBER(38,127)完全一致:属于定点数,限制小数点右侧最多127位有效数字。1e-130的有效小数位超范围,同样被截断为0。NUMBER
未指定任何精度和小数位,默认总有效位数上限为38,scale会根据存储值动态调整(范围-84到127)。此时Oracle以浮点数方式存储,只要数值的有效位数不超过38,就能完整保留。1e-130仅含1位有效数字,远小于38,因此可以精确存储为1e-130。NUMBER(*)
仅指定precision为*(即默认38),未指定scale,行为和NUMBER完全一致:属于动态浮点数存储,自动适配输入值的scale,有效位数不超38即可完整保留,所以1e-130能被正确存储。
内容的提问来源于stack exchange,提问作者Tang
相关产品推荐
相关产品推荐

