character:
经过测试与char基本相同,由于我个人的测试中没有找到不同的地方,所以怀疑char是character的缩写形式的同义词。
varchar:
标准SQL中的可变长字符串类型,在标准SQL中允许存放空的字符串,但是在oracle中对其做出了一些改动,即:如果存放的是空字符串,则将其判断为null。另外被oracle保留在以后可能会对其做出改变。
varchar2:
目前为止与varchar相同,可变长的字符串类型,但oracle官方承诺varchar在将来可能会被改变,但varchar2肯定不会改变,因此推荐使用varchar2。
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
二、类型比较:
varchar与varchar2:
Oracle官方文档的解释:
Currently, VARCHAR is synonymous with VARCHAR2. However, in future releases of PL/SQL, to accommodate emerging SQL standards, VARCHAR might become a separate datatype with different comparison semantics. So, it is a good idea to use VARCHAR2 rather than VARCHAR
翻译:
目前, VARCHAR是VARCHAR2的同义词。然而,在未来的PL/SQL版本中,VARCHAR可能成为一个单独的数据类型与不同的比较语义,以适应新出现的SQL标准。 因此,使用VARCHAR2而不是VARCHAR是一个好习惯。
附加解释:二者的最大长度都为4000字节,详见下面的“三、类型长度解释”。
结论:varchar类型的语义在将来可能会变,而官方同样承诺varchar2的语义肯定不会变,所以推荐使用后者。
long:
LONG 数据类型是一个遗留下来的而且在将来不会被支持的数据类型。它将被LOB(Large Object)数据类型所代替。特点如下:
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、不能在SQL*Plus中将LONG类型列的数值插入到另一个表格中,如insert into ...select。
5、不能在SQL*Plus中通过查询其他表的方式来创建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类型列不能用于分布查询。
LOB:
Large Object的简写,是专门用于处理大对象的数据类型,一个表中可以有多个LOB字段,每个字段可以存储达4GB的数据,LOB主要分为以下两类:
1、BLOB(Binary Large Object):适合于存放程序、图片、影音等非结构化文件。
2、CLOB(Character Large Object):适用于存储文本型数据,例如文章、新闻、记录、日志等。