我已经找过了,但我找不到我的问题的确凿答案...
我需要知道Oracle中数字(P)字段的存储大小。
例如: NUMBER(1)、NUMBER(3)、NUMBER(8)、NUMBER(10)等
发布于 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。
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位数字可能需要不同的存储量。
发布于 2014-06-16 17:09:16
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 maxRefer here,也可以是here
发布于 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数据类型。
https://stackoverflow.com/questions/24240087
复制相似问题