Oracle
Char与nchar都是固定字宽的变量类型。意味着如果字符变量长度不达到字宽,那么会用空格来代替,在磁盘中是以固定字节数存储的。最大存储2000字节,超过2000字节,oracle就会报错.
Varchar与nvarchar存储的是灵活的字宽变量。可以给它设定最大长度,如varchar2(20 char),只要不超过这个长度,磁盘存储的时候是以实际字宽进行存储。另外要说明一点,varchar2(20 char)与varchar2(20 byte),varchar2(20)是不一样的。Varchar2默认是存储字符的。一个字符由2个字节组成。所以varchar2(20 char)最多能存储5个汉字,varchar2(20 byte)最多能存储10个汉字。
Varchar2与nvarchar2基本相同,区别在于varchar2是用数据库默认字符集存储,而nvarchar2是用NLS(national language support)提供的国家字符集存储。具体怎么区别,我也不太懂,网上也没查到,有没有大神能帮忙解答。
Varchar2与char的效率基本相同(在TOM的书上是这么说的),有人会觉得char(4)的变量,查询值时只搜索四位。但是varchar2(20)的变量,即使它存储的是四个字节字宽,也要搜索20位,所以效率来看,char要好于varchar2。但是在数据库内部数据的存储是以
length | A | B | c |
这样的形式存储,即v1 varchar2(4):=‘abc’;存储的形式是v1的长度,加上其内容。所以在查询或者存储值时,知道了其长度,只要查询其前几位即可,不必查询后面的内容(其实后面也没有内容,连空格都没有)。效率应该跟char是一样的。
但是考虑到varchar2节约空间以及容错性大大增强,建议使用varchar2。
在数字变量上,oracle有三种基本的类型:Number,binary_float,binary_double。其中number是我们最长用的,它表示的精度最高。类似number(p,s)。Integer,float,double都是这基本变量的子变量。
有一点需要说明的:float支持在硬件和硬件上的运行。所以float的效率要略高于number的。
日期类型:
Date和Timestamp。Date是oracle非常古老的数据类型,有存储固定7个字节的宽度。包括世纪,年份,月份,天,时,分,秒。Timestamp(n)可以指定秒区的小数位数。如果N为0,则与Date表示形式一样。
SELECT SYSTIMESTAMP FROM DUAL;
08-5月 -13 08.53.45.187000 上午 +08:00
SELECT SYSDATE FROM DUAL;
2013-5-8 AM 08:54:40