首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle NUMBER(p)存储大小?

Oracle NUMBER(p)存储大小?
EN

Stack Overflow用户
提问于 2014-06-16 17:07:15
回答 3查看 44.7K关注 0票数 25

我已经找过了,但我找不到我的问题的确凿答案...

我需要知道Oracle中数字(P)字段的存储大小。

例如: NUMBER(1)、NUMBER(3)、NUMBER(8)、NUMBER(10)等

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-16 17:30:26

所使用的存储空间取决于实际数值,以及列精度和列的小数位数。

The Oracle 11gR2 concepts guide says

Oracle数据库以可变长度格式存储数字数据。每个值都以科学记数法存储,其中1个字节用于存储指数。数据库最多使用20个字节来存储尾数,尾数是浮点数的一部分,包含其有效数字。Oracle数据库不存储前导零和尾随零。

The 10gR2 guide goes further

考虑到这一点,可以使用以下公式计算特定数值数据值数字(P)的列大小(以字节为单位),其中p是给定值的精度:

舍入((长度(P)+s)/2))+1

其中,如果数字为正,s等于0,如果数字为负,s等于1。

零和正负无穷大(仅在从版本5的Oracle数据库导入时生成)使用唯一的表示形式进行存储。零和负无穷大各需要1个字节;正无穷大需要2个字节。

如果您可以访问My Oracle Support,请参阅备注1031902.6中的详细信息。

You can see the actual storage used with vsize or dump

代码语言:javascript
复制
create table t42 (n number(10));

insert into t42 values (0);
insert into t42 values (1);
insert into t42 values (-1);
insert into t42 values (100);
insert into t42 values (999);
insert into t42 values (65535);
insert into t42 values (1234567890);

select n, vsize(n), dump(n)
from t42
order by n;

          N   VSIZE(N)                           DUMP(N) 
------------ ---------- ---------------------------------
         -1          3           Typ=2 Len=3: 62,100,102 
          0          1                  Typ=2 Len=1: 128 
          1          2                Typ=2 Len=2: 193,2 
        100          2                Typ=2 Len=2: 194,2 
        999          3           Typ=2 Len=3: 194,10,100 
      65535          4          Typ=2 Len=4: 195,7,56,36 
 1234567890          6   Typ=2 Len=6: 197,13,35,57,79,91 

请注意,存储空间根据值的不同而不同,即使它们都在number(10)列中,而且两个3位数字可能需要不同的存储量。

票数 39
EN

Stack Overflow用户

发布于 2014-06-16 17:09:16

代码语言:javascript
复制
NUMBER  
999...(38 9's) x10125 
maximum value   Can be represented to full 38-digit precision (the mantissa).

-999...(38 9's) x10125 
minimum value   Can be represented to full 38-digit precision (the mantissa).


Precision   38 significant digits    ==> NUMBER(38) is the max

Refer here,也可以是here

票数 2
EN

Stack Overflow用户

发布于 2017-09-13 18:18:06

varchar一样,Oracle中的number数据类型是一种长度可变的特殊数据类型。然后,如果您将相同的数据存储在number(5)number(20)中,那么存储就像将列声明为varchar(100)varchar(200)一样。

因此,在number(p,s)中指定p参数对存储大小没有影响,仅用于对数据应用约束。但是指定s参数可以通过舍入数据来减小大小。

number数据类型的最小存储大小为1字节,最大存储大小为21字节。因此,如果您不想应用约束,则使用不带p参数number数据类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24240087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档