关于ORACLE的字符窜存储(未完善,欢迎补充)
oracle中常见的用于存储字符串的数据类型有:
数据类型 | 是否定长 | 最多存储数 | 效率排行 | 备注 | 是否oracle特有 | 英文占位 | 中文占位 |
char | 是 | 2000 | 比VARCHAR2稍高 |
char的长度是固定的,不足固定长度用空格占位。其所占空间随多,但是效率较快。 |
|||
character | Character 数据类型用来存储字母数字型数据。 | ||||||
varchar | 4000 |
varchar2的前身。标准SQL中的可变长字符串类型,在标准SQL中允许存放空的字符串,但是在 oracle中对其做出了一些改动,即:如果存放的是空字符串,则将其判断为null。另外被oracle 保留在以后可能会对其做出改变。 |
|||||
varchar2 | 4000 |
varchar2是变长的,有多少字符占多少空间。其虽节省空间,但是如果经常被修改,会引起‘行迁移’ 造成多余的I/O。Varchar2类型的字段长度可以达到4000字节,Varchar2类型的变量长度可以达 到32676字节。 |
是 | ||||
nchar | 是 |
与char一样是定长的字符串类型,会以空格补齐剩下的空间。专为UNICODE字符而设计的数据 类型,用来存储NLS(National Language Support)数据,由于以单字节存放字符的类型只能 使用于站用字节少的简单的语言,比如英文(26个字母),而中文,韩文等通常都需要2个甚至 更多的字节,所以为了适应这种需要,制定了以N为开头的数据类型(UNICODE通常被用N来 表示),这种类型一个字符需要占用2个字节的空间,简单字符(比如a)剩余的部分会用0补齐。 |
|||||
nvarchar2 | 与char和nchar的关系一样,是varchar2类型的UNICODE字符专用版。 | ||||||
long |
大字段类型之一,此类型中存放的是可变长的字符串,专门用于存放超过4000字节的超长字符 串,最大上限为2GB。但是,这个类型是被oracle保留下来并且将来会被取消掉的数据类型, 替代它的是同为大字段类型的LOB(Large Object)类型。 |
||||||
long raw |
与long互补,long raw可以存储非结构化数据,比如二进制文件,图形文件,或其他外部 文件,最大上限2GB。虽然还没有混到像long那样将被抛弃的程度,但是,long raw能 做到的LOB也一样能做到,Oracle公司建议在以后的程序中尽量使用LOB类型。 |
||||||
lob |
LOB(Large Object) 数据类型即能存储结构化数据外,也能存储非结构化数据,最 大长度为4GB,比long和long raw更加灵活,Oracle公司建议,对大对象的操作 尽量使用LOB。 |
||||||
byte | |||||||
1、在oracle中可以dump函数查询数据的内部存储结构,如:
select cola,dump(cola) from test_char;
其中cola是列名,test_char是表名。
查询结果所得:typ为类型编号,len为每行数据所占字节数。
2、Byte是字节,char是字符串。从10g开始,oracle支持在字符类型的宽度定义时指定单位。
1个字符占多少字节由当前系统所采用的字符集来决定。而1个汉字占用两个字符。