Oracle数据中讨论 char , varchar , varchar2 数据类型:
这三种类型是我们使用最多的,在数据库中我们该怎么使用呢?
1.CHAR的长度是固定的,最多2000个字符串。。
2.VARCHAR , VARCHAR2可以肯定的是在oracle中目前是可以使用CARCHAR数据类型。。
他们的区别在网上找了半天也没有准确的答案,说是oracle中varchar是varchar2的同义词,也称别名。。
其次也有人认为varchar是最大长度为2000的可变字符串(和sql server中的varchar一致),而varchar2的最大长度为4000.。
知道了他们的特点 我们就来讨论一下区别:
char ,varchar ,varchar2由于后两者区别不大,我们先讨论一下char和他们的使用区别
后两者比char节省空间,在效率上比char稍微差一些。即要想获得效率,就要牺牲一下空间。。 这也就是我们在数据库设计上常说的“以空间换效率”。。后两者虽然比char节省空间,但是如果varchar和varchar2列经常被修改,而且每次修改数据的长度不同,这回引起”行迁移“现象(Row Migration),而这造成多余的I/O,是数据库设和调整中尽量避免的,在这种情况下用char代替varchar和varchar2会更好一些。当然还有一种情况就是象身份证这种长度几乎不变的字段可以考虑使用char,以获得更高的效率。。
varchar和varchar2这里就进入重点了,前面的区别我们在sql server中我们已经基本了解了,大家可能都知道,最多也就是复习下,但oracle增加了一个varchar2类型,是大家以前所没有用到过的。因为oracle保证在任何版本中该数据类型向上和向下兼容,但不保证varchar,还有其他数据中一般都有varchar这个数据类型。。
如果想在oracle新版本的数据库兼容就不要用varchar,如果想和oracle之外其他数据库兼容就不要用varchar2。
数据类型
|
参数
|
描述
|
char(n)
|
n=1 to 2000字节
|
定长字符串,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节)
|
varchar2(n)
|
n=1 to 4000字节
|
可变长的字符串,具体定义时指明最大长度n, 这种数据类型可以放数字、字母以及ASCII码字符集(或者EBCDIC等数据库系统接受的字符集标准)中的所有符号。 如果数据长度没有达到最大值n,Oracle 8i会根据数据大小自动调节字段长度, 如果你的数据前后有空格,Oracle 8i会自动将其删去。VARCHAR2是最常用的数据类型。 可做索引的最大长度3209。
|
number(m,n)
|
m=1 to 38 n=-84 to 127
|
可变长的数值列,允许0、正值及负值,m是所有有效数字的位数,n是小数点以后的位数。 如:number(5,2),则这个字段的最大值是99,999,如果数值超出了位数限制就会被截取多余的位数。 如:number(5,2),但在一行数据中的这个字段输入575.316,则真正保存到字段中的数值是575.32。 如:number(3,0),输入575.316,真正保存的数据是575。
|
date
|
无
|
从公元前4712年1月1日到公元4712年12月31日的所有合法日期, Oracle 8i其实在内部是按7个字节来保存日期数据,在定义中还包括小时、分、秒。 缺省格式为DD-MON-YY,如07-11月-00 表示2000年11月7日。
|
long
|
无
|
可变长字符列,最大长度限制是2GB,用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。 long是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
|
raw(n)
|
n=1 to 2000
|
可变长二进制数据,在具体定义字段的时候必须指明最大长度n,Oracle 8i用这种格式来保存较小的图形文件或带格式的文本文件,如Miceosoft Word文档。 raw是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
|
long raw
|
无
|
可变长二进制数据,最大长度是2GB。Oracle 8i用这种格式来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件。 在同一张表中不能同时有long类型和long raw类型,long raw也是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
|
blob clob nclob
|
无
|
三种大型对象(LOB),用来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件,最大长度是4GB。 LOB有几种类型,取决于你使用的字节的类型,Oracle 8i实实在在地将这些数据存储在数据库内部保存。 可以执行读取、存储、写入等特殊操作。
|
bfile
|
无
|
在数据库外部保存的大型二进制对象文件,最大长度是4GB。 这种外部的LOB类型,通过数据库记录变化情况,但是数据的具体保存是在数据库外部进行的。 Oracle 8i可以读取、查询BFILE,但是不能写入。 大小由操作系统决定。
|
|