Oracle字段类型及存储(⼀)
Oracle中2000个byte,并不是2000个字符的意思,1个字符在Oracle中可能是1个byte到4个byte不等,需看数据库字符集的设置了。
对GBK字符集⽽⾔,ASCII码中128个字符使⽤1个字节进⾏存储,其它字符使⽤双字节存储;对UTF8字符集⽽⾔,ASCII码中128个字符使⽤1个字节进⾏存储,其它采⽤两个或三个字节进⾏存储,四个字节存储的是极少使⽤字符;
数据库中有⼀个参数NLS_LENG TH_SEMANTICS,这个参数有两个取值CHAR和BYTE。当为CHAR时字符类型的长度是按字符个数来计算,⽽不是按BYTE来计算,这在使⽤变长字符集(AL32UTF8)的情况下⾮常有⽤,因为⼀个字符所占⽤的字节数是不定的,就给我们准确估计字段长度(BYTE)带来不便。
1、CHAR。
CHAR存储定长数据很⽅便,CHAR字段上的索引效率级⾼,⽐如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不⾜的⾃动⽤空格填充。
2、VARCHAR
VARCHAR存储变长数据,但存储效率没有CHAR⾼。如果⼀个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这⼀个字节⽤于保存实际使⽤
了多⼤的长度。从空间上考虑,⽤varchar合适;从效率上考虑,⽤char合适,关键是根据实际情况到权衡点。
3、TEXT
TEXT存储可变长度的⾮Unicode数据,最⼤长度为2^31-1(2,147,483,647)个字符。
4、NCHAR、NVARCHAR、NTEXT
这三种从名字上看⽐前⾯三种多了个“N”。它表⽰存储的是Unicode数据类型的字符。我们知道字符中,英⽂字符只需要⼀个字节存储就⾜够了,但汉字众多,需要两个字节存储,英⽂与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题⽽产⽣的,它所有的字符都⽤两个字节表⽰,即英⽂字符也是⽤两个字节表⽰。
5、字符集与国家字符集
1>字符集
(1)⽤来存储CHAR, VARCHAR2, CLOB, LONG等类型数据
(2)⽤来标⽰诸如表名、列名以及PL/SQL变量等
(3)⽤来存储SQL和PL/SQL程序单元等
2>国家字符集
(1)⽤以存储NCHAR, NVARCHAR2, NCLOB等类型数据
(2)国家字符集实质上是为oracle选择的附加字符集,主要作⽤是为了增强oracle的字符处理能⼒,因为NCHAR数据类型可以提供对亚洲使⽤定长多字节编码的⽀持,⽽数据库字符集则不能。国家字符集在oracle9i中进⾏了重新定义,只能在unicode编码中的
AF16UTF16和UTF8中选择,默认值是AF16UTF16
字段类型中⽂说明限制条件其它说明
CHAR固定长度字符串最⼤长度2000bytes
VARCHAR2可变长度的字符串最⼤长度4000bytes可做索引的最⼤长度749
NCHAR根据字符集⽽定的固定长度字符
最⼤长度2000bytes
NVARCHAR2根据字符集⽽定的可变长度字符
varchar2最大长度最⼤长度4000bytes
DATE⽇期(⽇-⽉-年)DD-MM-YY(HH-MI-
SS)经过严格测试,⽆千⾍问题
LONG超长字符串最⼤长度2G(231-1)⾜够存储⼤部头著作
RAW固定长度的⼆进制数据最⼤长度2000bytes可存放多媒体图象声⾳等LONG RAW可变长度的⼆进制数据最⼤长度2G同上
BLOB⼆进制数据最⼤长度4G
CLOB字符数据最⼤长度4G
NCLOB根据字符集⽽定的字符数据最⼤长度4G
BFILE存放在数据库外的⼆进制数据最⼤长度4G
ROWID数据表中记录的唯⼀⾏号10bytes********.****.****格式,*为0或1 NROWID⼆进制数据表中记录的唯⼀⾏号最⼤长度4000bytes
NUMBER(P
S)数字类型P为整数位,S为⼩数位
DECIMAL(P
S)数字类型P为整数位,S为⼩数位
INTEGER整数类型⼩的整数
FLOAT浮点数类型NUMBER(38),双精度
REAL实数类型NUMBER(63),精度更⾼
更⾼

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。