如何计算Oracle中NUMBER数据类型的字节占用大小
Oracle NUMBER类型存储空间计算说明
你对NUMBER存储空间的计算思路存在误区,所有声明的NUMBER类型(无论精度p、刻度s设为多少),单个值的存储空间都在1~22字节之间,最大仅为22字节,不存在你计算的几百字节的情况。
Oracle的NUMBER采用变长压缩的科学计数法存储,内部结构为:
- 1字节存储该数值的总长度
- 1字节存储带符号的指数信息
- 最多20字节存储尾数数据(每字节可存储2位十进制数字)
三部分加起来的总长度最大为22字节,这个上限对所有NUMBER类型声明都通用。
NUMBER(p,s)中的p和s仅用来限制存入数值的合法范围,和实际占用的存储空间没有线性对应关系:
NUMBER(38,0)代表可存储最大38位的整数,只有存入接近38位的超大整数时,才会占满22字节的上限,存入小数值(例如100)仅占用3字节左右。NUMBER(4,2)代表可存储的数值范围为-99.99~99.99,哪怕存入最大值99.99,实际占用也仅为3字节,远低于22字节的上限。
你查阅的官方文档描述是NUMBER类型的通用规则,1~22字节就是单个值的完整存储范围,不需要和精度p做乘法计算。
内容的提问来源于stack exchange,提问作者Student Work
相关产品推荐
相关产品推荐

