oracle中所有的数值类型除了binary_float和binary_double之外,
其他的数据类型都转换为number类型存储。
number类型是一种变长格式,长度范围[0~22],精度可达38
numeric(p,s):完全映射至number(p,s),p默认为38
decimal(p,s)或dec(p,s):完全映射至number(p,s)
integer或int:完全映射至number(38)
smallint:完全映射至number(38)
float(b):映射至number类型
double precision:映射至number类型
real:映射至number类型
create table tb(
col_1 number(5,5),
col_2 numeric(10),
col_3 decimal(38),
col_4 int,
col_5 smallint,
col_6 double precision,
col_7 real,
col_8 float);
select column_name,data_type,data_length,data_precision,data_scale
from user_tab_columns
where table_name='TB';
COLUMN_NAME DATA_TYPE DATA_LENGTH DATA_PRECISION DATA_SCALE
------------------------------ -------------------------- ------------- -------------- ----------
COL_1 NUMBER 22 5 5
COL_2 NUMBER 22 10 0
COL_3 NUMBER 22 38 0
COL_4 NUMBER 22 0
COL_5 NUMBER 22 0
COL_6 FLOAT 22 126
COL_7 FLOAT 22 63
COL_8 FLOAT 22 126
COL_9 BINARY_FLOAT 4
COL_10 BINARY_DOUBLE 8
从data_length这列看,上面所有的数值类型长度都是22字节,说明所有的类型都映射至了number类型。
binary_float:占用磁盘5个字节,其中4个固定字节用于存储浮点数,1个为长度字节。
binary_double:占用磁盘9个字节,其中8个固定字节用于存储浮点数,1个为长度字节。