Oracle 数据类型

Oracle数据类型 简要说明
字符类型 char和varchar2,可表达任何字符串
数字类型 number(m,n),可表达任何数字,m是数字的精度,n是小数点后的位数,如果n为0则表示是一个整数。
日期类型 date,存放日期和时间,包括年(yyyy)、月(mm)、日(dd)、小时(hh24)、分(mi)、秒(ss)
clob类型 存放单字节字符串或多字节字符串数据,如文本文件、xml文件
blob类型 存放非结构化的二进制数据,如图片、音频、视频、office文档等
rowid类型
urowid类型
存放表中记录在数据库中的物理地址

字符类型

字符类型 定长/变长 是否必须指定长度 默认值 字节 unicode字符集
char 定长字符类型(未达到指定长度时,自动在末尾用空格补全) 1 最大2000字节 非unicode
nchar 定长字符类型(未达到指定长度时,自动在末尾用空格补全) 1 最大1000字节,所有字符都占两个字节 根据unicode
varchar2 变长字符类型(未达到指定长度时,不自动补全空格) 最大4000字节 非unicode
nvarchar2 变长字符类型(未达到指定长度时,不自动补全空格) 最大2000字节 根据unicode
  1. 最大xxx字节,字节而非字符个数,如char(1)就连一个汉字都不能存放。

  2. unicode字符集是为了解决字符集不兼容的问题而产生的,所有字符都用两个字节表示,即英文字符也用两个字节表示。

创建表验证字符类型

create table char_table(
  char_column char,
  nchar_column nchar(2),
  varchar2_column varchar2(4000),
  nvarchar2_column nvarchar2(4)
);

插入数据

insert into char_table values ('1', '太一', '亚古兽进化', '暴龙兽');

查询数据

select * from char_table;

数字类型

oracle中的数字类型主要为三种:number,float,binary_*,其他的类型基本上都是number类型或者float类型的子类型。

数字类型 使用频率 说明
number(p,s) 常用
float 不常用 二进制精度,需要进行精度转换
binary_float
binary_double
不常用 表示范围更大可用于科学计算,精度没有number类型高(可用于金融数据)

number(p,s)类型

22个字节的存储空间

字母 释义 说明 取值范围 默认值 其它
p DBA_TAB_COLUMNS表的DATA_PRECISION(精度) 包括小数在内的总共有效位数 [1~38] 若没有指定,默认为38 当整数部分的长度大于p时,报错
s DBA_TAB_COLUMNS表的DATA_SCALE(小数位) 精确到多少位小数 [-84~127] 若没有指定,默认为0 当小数位数大于s时,并四舍五入
当s取负数时,将小数点左边的s置为0,并四舍五入

官方文档给出的几个例子如下:

输入数据 定义类型 存储结果
1,234,567.89 NUMBER 1234563.89
1,234,567.89 NUMBER(*,1) 1234563.9
1,234,567.89 NUMBER(9) 1234564
1,234,567.89 NUMBER(9,2) 1234563.89
1,234,567.89 NUMBER(9,1) 1234563.9
1,234,567.89 NUMBER(6) 报错,超精度
1,234,567.89 NUMBER(7,-2) 1234600

number类型的子类型

number类型的子类型 简要说明
integer 等同于number(38)
smallint 同于number(38)
decimal 可以使用decimal(p,s),若p,s未指定,等同于number(38)

float类型

字母 释义 说明 取值范围 默认值
float(b) 二进制精度(binary precision b表示二进制进度 [1,126] 126

b是一个二进制精度(binary precision),而不是我们通常说的十进制精度(decimal precision)

需要进行以下的转换:binary precision=int(b*0.30103)

举例来说:当b=2,则对应的十进制精度为int(2*0.30103)=0,即小数点后精度为0。

eg:56.2存储到float(2)变为60。计算过程:56.2=5.62*10^1,因为精度为0只能取到整数,5.62四舍五入后为6,最后取值为6*10^1=60

float类型的子类型

float类型的子类型 简要说明
real 等同于float(63)

binary_float和binary_double类型

数据类型 说明 字节长度
binary_float 32位单精度浮点数数据类型 5个字节(4字节+1个长度字节)支持至少6位精度
binary_double 64位双精度浮点数数据类型 9个字节(8字节+1个长度字节)

创建表验证数字类型

create table num_table(
  number1 number,
  number2 number(38),
  number3 number(9,2),
  int4 int,
  smallint1 smallint,
  decimal1 decimal(5,2),
  float1 float,
  float2 float(2),
  real1 real,
  binary_float1 binary_float,
  binary_double1 binary_double
);

插入数据

insert into num_table values (1.23, 123, 1234567.89, 573, 34, 673.43, 34.1264, 56.2, 23.231, 12.34f, 34.56d);

查询数据

select * from num_table;

日期类型

未完待续...

long类型

未完待续...

blob & clob & nclob大对象数据类型

未完待续...

rowid & urowid类型

未完待续...

热门相关:甜蜜婚令:陆少的医神娇妻   全能王妃:偷个王爷生宝宝   风流医圣   盖世双谐   学霸,你女朋友掉了