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 |
-
最大xxx字节,字节而非字符个数,如char(1)就连一个汉字都不能存放。
-
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类型
未完待续...