Oracle
数据类型
#字符串类型
#字符串数据类型可以依据存储空间分为固定长度类型(CHAR/NCHAR) 和可变长度类型(VARCHAR2/NVARCHAR2)两种。
固定长度:是指虽然输入的字段值小于该字段的限制长度,但是实际存储数据时,会先自动向右补足空格后,才将字段值的内容存储到数据块中。
可变长度:是指当输入的字段值小于该字段的限制长度时,直接将字段值的内容存储到数据块中,而不会补上空白,这样可以节省数据块空间。
CHAR
定长字符串,会用空格填充来达到其最大长度。非NULL的CHAR(12)总是包含12字节信息。CHAR字段最多可以存储2000字节的信息。如果创建表时,不指定CHAR长度,则默认为1。另外你可以指定它存储字节或字符,例如 CHAR(12 BYTYE)、CHAR(12 CHAR)。一般来说默认是存储字节。
VARCHAR2
变长字符串,与CHAR类型不同,它不会使用空格填充至最大长度。VARCHAR2最多可以存储4000字节的信息。
NVARCHAR2
一个包含UNICODE格式数据的变长字符串,NVARCHAR2最多可以存储4000字节的信息。
VARCHAR2与NVARCHAR2的区别
区别一:
VARCHAR2(size type),size最大为4000,type可以是char也可以是byte,不标明type时默认是byte(如:name VARCHAR2(60))
NVARCHAR2(size),size最大值为2000,单位是字符;
区别二:
VARCHAR2最多存放4000字节的数据,最多可以可以存入4000个字母,或最多存入2000个汉字(数据库字符集编码是GBK时,varchar2最多能存放2000个汉字,数据库字符集编码是UTF-8时,那就最多只能存放1333个汉字)
NVARCHAR2(size),size最大值为2000,单位是字符,而且不管是汉字还是字母,每个字符的长度都是2个字节。所以nvarchar2类型的数据最多能存放2000个汉字,也最多只能存放2000个字母。并且NVARCHAR2不受数据库字符集的影响。
LONG:
1.LONG 数据类型中存储的是可变长字符串,最大长度限制是2GB。
2、对于超出一定长度的文本,基本只能用LONG类型来存储,数据字典中很多对象的定义就是用LONG来存储的。
3、LONG类型主要用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。
4、很多工具,包括SQL*Plus,处理LONG 数据类型都是很困难的。
5、LONG 数据类型的使用中,要受限于磁盘的大小。
能够操作 LONG 的 SQL 语句:
1、Select语句
2、Update语句中的SET语句
3、Insert语句中的VALUES语句
限制:
1、一个表中只能包含一个 LONG 类型的列。
2、不能索引LONG类型列。
3、不能将含有LONG类型列的表作聚簇。
4、不能在SQLPlus中将LONG类型列的数值插入到另一个表格中,如insert into …select。
5、不能在SQLPlus中通过查询其他表的方式来创建LONG类型列,如create table as select。
6、不能对LONG类型列加约束条件(NULL、NOT NULL、DEFAULT除外),如:关键字列(PRIMARY KEY)不能是 LONG 数据类型。
7、LONG类型列不能用在Select的以下子句中:where、group by、order by,以及带有distinct的select语句中。
8、LONG类型列不能用于分布查询。
9、PL/SQL过程块的变量不能定义为LONG类型。
10、LONG类型列不能被SQL函数所改变,如:substr、instr
#数字类型
NUMBER
NUMBER(P,S)是最常见的数字类型,可以存放数据范围为10^130~10^126(不包含此值),需要1~22字节(BYTE)不等的存储空间。
P 是Precison的英文缩写,即精度缩写,表示有效数字的位数,最多不能超过38个有效数字。
S是Scale的英文缩写,可以使用的范围为-84~127。Scale为正数时,表示从小数点到最低有效数字的位数,它为负数时,表示从最大有效数字到小数点的位数。
number(5) 最大99999
number(5,2) 最大999.99
INTEGER
INTEGER是NUMBER的子类型,它等同于NUMBER(38,0),用来存储整数。若插入、更新的数值有小数,则会被四舍五入。
FLOAT
FLOAT类型也是NUMBER的子类型。
Float(n),数n指示位的精度,可以存储的值的数目。n值的范围可以从 1 到 126。若要从二进制转换为十进制的精度,请将n乘以 0.30103。要从十进制转换为二进制的精度,请用3.32193乘小数精度。126位二进制精度的最大值是大约相当于38位小数精度。
#日期类型
DATE
DATE是最常用的数据类型,日期数据类型存储日期和时间信息。虽然可以用字符或数字类型表示日期和时间信息,但是日期数据类型具有特殊关联的属性。为每个日期值,Oracle 存储以下信息: 世纪、 年、 月、 日期、 小时、 分钟和秒。一般占用7个字节的存储空间。
TIMESTAMPL ( p )]
精确到秒的小数点后9位。表示时间戳,是 DATE 数据类型的扩展,允许存储小数形式的秒值。 p 表示秒的小数位数,取值范围为0~9,默认值为6。根据 p 值的设置不同, TIMESTAMP 类型数据占据7~11B空间,由世纪、年、月、日、时、分、秒组成,如30-MAY-1207.56.07.544000PM。
#LOB类型
CLOB
存储字符,最大可以存4G
用于存储单字节或多字节的大型字符串对象,支持使用数据库字符集的定长或变长字符。在 Oracle 12c中 CLOB 类型最大存储容量为128TB。
BLOB
存储图像、声音、视频等二进制数据,最大可存4G
用于存储大型的、未被结构化的变长的二进制数据,如二进制文件、图片文件、音频和视频等非文本文件。在 Oracle 12c中 BLOB 类型最大存储容量为128TB。
BFILE
用于存储指向二进制格式文件的定位器,该二进制文件保存在数据库外部的操作系统中。在 Oracle 12c中 BFILE 文件最大容量为128TB,不能通过数据库操作修改 BFILE 定位器所指向的文件。
#二进制类型
ROW ( size )
用于存储变长的二进制数据, size 表示数据长度,取值范围为1~2000B。
LONG ROW
用于存储变长的二进制数据,最大存储数据量为2GB。 Oracle 建议使用 BLOB 类型代替 LONG RAW 类型。
#行类型
ROWID
行标识符,表示表中行的物理地址的伪劣类型。 ROWID 类型数据由18位十六进制数构成,其中1-6位表示对象编号,7-8位表示文件编号,9-15位表示数据块编号,16-18位表示数据块内编号。