Oracle中的数据类型
- 格式:pdf
- 大小:160.84 KB
- 文档页数:4
Oracle中的数据类型
Ø 简介
本⽂主要来讨论 Oracle 中的数据类型,包括以下内容:1. 概念介绍
2. 数值类型
3. 字符类型
4. ⽇期类型
5. ⼤数据与⼆进制类型
6. 列举常⽤类型的数字代码
1. 概念介绍
在我们的程序中有各种数据类型,⽽在 Oracle 中也有很多种类型,其实每⼀种语⾔的数据类型都会跟数据库中的数据类型⼤致的对应起来。⽐如:
在 Oracle 中主要分为四⼤数据类型,即:数字类型、字符类型、⽇期类型,以及⼤数据与⼆进制类型,下⾯就来讨论着⼏种常⽤的数据类型。
2. 数值类型
1) NUMBER(Type = 2)
number 类型是 Oracle 中常⽤的数据类型,即可以⽤于存储整数整数,也可以存储⼩数⼩数,是⼀个⾮常有意思的数据类型。number 是⼀个可变长度可变长度的数据
类型,并且始终保持四舍五⼊四舍五⼊的原则。
number 可以指定两个参数 number(p,s):
l p表⽰有效位,从左边第⼀个⾮0的数字开始数,到结尾的长度,取值范围:1 ~ 38;
l s表⽰⼩数位,取值范围:-84 ~ 127。
注意:注意:通常情况下(需要整数位时),应该 p > s,例如:
1. number(3,2) 只能存储:0.01 ~ 9.99 和 -0.01 ~ -9.99
2. number(3,3) 只能存储:0.001 ~ 0.999 和 -0.001 ~ -0.999
3. number(2,3) 只能存储:0.001 ~ 0.099 和 -0.001 ~ -0.099
n number 可以表⽰的数值范围:-1.0e-130 ~ 1.0e+126,占⽤空间为1 ~ 22 个字节。
下⾯看⼏个常见的例⼦:1. number
create table t_number(num number);
insert into t_number values(56);
insert into t_number values(56.78);
select * from t_number;
执⾏以上语句,实际存储为56和56.78。当不指定有效位和⼩数位时,number 可根据实际值⽽确定。
查看占⽤字节情况:select num, dump(num) from t_number;56占⽤2个字节;⽽56.78占⽤3个字节
2. number(3)
create table t_number3(num number(3));
insert into t_number3 values(999);
insert into t_number3 values(28.56);
select * from t_number3;
执⾏以上语句,实际存储为999和29,表⽰存储为整数形式,⼩数位进⾏四舍五⼊。number(3) 相当于 number(3,0),取值范围为:-999~999
3. number(5,2)
create table t_number5_2(num number(5,2));
insert into t_number5_2 values(128.264);
insert into t_number5_2 values(128.265);
select * from t_number5_2;
执⾏以上语句,实际存储为128.26和128.27,当⼩数位⼤于指定范围时,将进⾏四舍五⼊。
n 更多例⼦
范围插⼊值1结果插⼊值2结果
number(5,2)23.5623.560.0080.01
number(4,3)123.45报错3.453.45
number(5,5)0.20.20.0000120.00001
number(3,-2)182200142.85100
number(2,3)0.123报错0.0230.023
0.23报错
number(3,3)0.2340.2340.230.23
0.10.1
number(6,3)999.9995999.9990.00950.01
n 总结
1) 有效位范围表⽰,从左边数第⼀个⾮0数值开始,到最后⼀个数值的长度范围。例如:number(3,2) 最⼤值:9.99,最⼩值:0.01 或 0
2) 是不是发现,number 确实是⼀个很有意思的数据类型。它通过有效位(P)和⼩数位(S),就可以精确设置该字段可以存储的数据范围。
3) 在平常开发中,对于已知长度数值类型,建议指定有效位和⼩数位;对于未知长度的数值,可以使⽤ number。
2) 其他数值类型介绍
类型描述存储描述
DECIMAL(P,S)数字类型P为有效位,S为⼩数
INTEGER整数类型⼩的整数
FLOAT浮点数类型NUMBER(38), 双精度REAL实数类型NUMBER(63), 精度更⾼create table t_test_number(deci decimal, i integer, f float, r real);
insert into t_test_number values(12.23, 23.55, 22.35, 32.523);
select * from t_test_number;
执⾏以上语句,将看到如下结果:
说明:说明:这些数据类型应该都属于 number 类型的“变种”,⽽且使⽤ number 类型都能替代这些数据类型,所以这⾥不过多去研究它们。
3. 字符类型
1) CHAR(Type = 96)
⽤于存储固定长度的字符串,⼀个空间占⽤1个字节个字节,最多存储2000个字节个字节,即:char(2000),这⾥的2000表⽰字节数。通常也就是1000个汉字,
或者2000个字母、数字等。⽰例:create table t_char(name char(10));
insert into t_char values('中国');
insert into t_char values('ab12');
commit;
select name, dump(name) from t_char;
执⾏以上语句将看到如下结果:
由图可见,两次插⼊的字符都不⾜指定长度,便以空格的字节空格的字节(32)补齐补齐了,总长度依然是10个字节;另外,当插⼊数据时超过指定长度将报错报错,。
2) NCHAR(Type = 96)
根据字符集⽽定的固定长度固定长度字符串。⽤于存储固定长度的字符串,⼀个空间占⽤2个字节个字节,最多存储2000个字节个字节,即:nchar(1000),注意这⾥的10
00表⽰字符数。
为什么说是字符数呢?N表⽰是以 unicode 编码格式存储,⽆论中⽂或英⽂、数字都以⼀个字符(2个字节)来存储,这也是 CHAR 与 NCHAR 最⼤的
区别。看⽰例:create table t_nchar(name nchar(10));
insert into t_nchar values('中国');
insert into t_nchar values('ab12');
commit;
select name, dump(name) from t_nchar;
由图可见,⽆论是中⽂或英⽂都是⼀个字符占⽤两个字节,所以 nchar(10) 可以存储10中⽂,同时也只能存储10英⽂或数字。例如:insert into t_nchar values('中华⼈民共和国中华⼈');
insert into t_nchar values('abcde12345');
3) VARCHAR2(Type = 1)
VARCHAR2 与 CHAR 类似,不同的是 VARCHAR2 ⽤于存储可变长度的字符串。最⼤长度是 CHAR 的两倍,也就是4000个字节个字节,即:varchar2(40
00) ,通常也就是2000个汉字,或者4000个字母、数字等。⽰例:
create table t_varchar2(name varchar2(10));
insert into t_varchar2 values('中国');
insert into t_varchar2 values('ab12');
commit;
select name, dump(name) from t_varchar2;
执⾏以上语句将看到如下结果:
可以看到与 char 不⼀样,两次插⼊都没有满⾜10个字节,是多少个字节就存多少个字节,并没有以空格(byte 32)去补齐,帮我们节省了空间。
4) NVARCHAR2(Type = 4)
根据字符集⽽定的可变长度可变长度字符串。NVARCHAR2 与 NCHAR 类似,不同的是 NVARCHAR2 ⽤于存储可变长度的字符串。最⼤长度是 NCHAR 的两
倍,也就是4000个字节个字节,即:nvarchar2(2000) ,通常也就是2000个汉字、字母、数字等。⽰例:
create table t_nvarchar2(name nvarchar2(10));
insert into t_nvarchar2 values('中国');
insert into t_nvarchar2 values('ab12');
commit;
select name, dump(name) from t_nvarchar2;
执⾏以上语句将看到如下结果:
由图可见,与 NCHAR ⼀样,⼀个英⽂或数字都占⽤了两个字节,但是长度是不固定的。
l 使⽤ NVARCHAR2 类型存储多国语⾔,例如:
CREATE TABLE T1(Id int, Name nvarchar2(256));
INSERT INTO T1 VALUES(1, N'اﻟﺰﻧﺪاﻧﻲ ﻋﺰﻳﺰ اﻟﻤﺠﻴﺪ ﺪ');
INSERT INTO T1 VALUES(2, N'中国abc');
SELECT * FROM T1;
DROP TABLE T1;
n 总结
四种字符类型⽐较:
类型可变长度⼀个空间占⽤字
节数最⼤字节数(bytes)适⽤场景
CHAR否12000、 char(2000)定长:英⽂、数字
NCHAR否22000, nchar(1000)定长:中⽂
VARCHAR2是14000, varchar2(40000)变长:英⽂、数字、
中⽂
NCARCHAR2是24000, ncarchar2(2000)变长:中⽂
1. 对于中⽂,在这四种类型中存储,都是占2个或2个以上字节;
2. 对于英⽂或数字,在 CHAR 和 VARCHAR2 中占⼀个字节,在 NCHAR 和 NVARCHAR2 中占两个字节。
n VARCHAR2 与 CHAR 的区别:
⼤家可能为想既然 varchar2 这么有优势,为什么需要 char 呢,不是多余么?
答案:当然不是,char 也有它⾃⼰的有优势。当我们存储已知固定长度的数据时,⽐如:⼿机号(11位)、⾝份证号码(18位)等,可以考虑使⽤ char。因为,在查询数据时,对于 char 类型字段,是全字符整体匹配;⽽ varchar2 是⼀个字符⼀个字符的进⾏匹配。所以,从查询效率上,char 要⽐