4.2 如何选择数据类型 |
![]() |
Oracle提供了大量的数据类型,为了优化存储、提高数据库性能,在任何情况下均应使用最精确的数据类型,即在所有可以表示该列值的数据类型中,该类型使用的存储空间最少。
数值数据类型只有NUMBER型,但是NUMBER功能不少,它可以存储正数、负数、零,定点数和精度为30位的浮点数。其格式为number(m,n),其中m为精度,表示数字的总位数,取值范围是1~38;n为范围,表示小数点右边数字的位数,取值范围为-84~127。
如果不需要小数部分,就使用整数来保存数据,可以定义为number(m,0)或者number(m);如果需要表示小数部分,就使用number(m,n)。
如果只需要记录日期,那么可以使用DATE类型。如果需要记录日期和时间,那么可以使用TIMESTAMP类型。特别是需要显示上午、下午或者时区时,必须使用TIMESTAMP类型。
CHAR和VARCHAR类型的区别:
CHAR类型用于定义固定长度的字符串字段,VARCHAR类型用于定义可变长度的字符串字段。CHAR类型会自动补齐插入数据的尾部空格,VARCHAR类型则不会补齐尾部空格。
CHAR类型为固定长度,所以它的处理速度比VARCHAR2类型的处理速度快,但是它的缺点是浪费存储空间。所以对存储空间不大而对处理速度上有要求的数据可以采用CHAR类型,反之可以采用VARCHAR2类型。
VARCHAR2类型虽然比CHAR类型节省空间,但是如果一个VARCHAR2类型的列经常被修改,而且每次被修改的数据的长度不同,就会引发“行迁移”(Row Migration)现象,而造成多余的输入输出(I/O),这是在数据库设计和调整中要尽力避免的,在这种情况下用CHAR类型代替VARCHAR2类型会更好一些。当然,还有一种情况是像身份证这种长度几乎不变的字段自然要考虑使用CHAR类型,以获得更高的效率。