如果用char,问题非常多:
1.可能浪费空间,除非正好放满。
2.会导致程序员在字段前使用trunc等截掉尾部空格的函数,要优化必须建立一些函数索引。写程序还要用rpad之类的函数。
3.如果char很大,很可能导致索引无法建立。
4.长度一变,经常要修改程序。
5.导致程序使用大量的非绑定变量。这个可能更开发语言有关,例子:
c_id=‘1212’ 可以查询到结果
如果使用绑定:c_id=:a这个要看各种开发语言,因为不会补全尾部的空格,可能查询结果为空。
6.char/nchar类型还会带来混乱(很多应用存储了信息之后却无法“找到”所存储的数据)。
还有:char/nchar实际上只是伪装的varchar2/nvarchar2,基于这一点,所以我认为其实只需要考虑这两种字符串类型:varchar和nvarchar2。
oracle的long类型可谓“臭名昭著”,由于long类型的限制太多,以至于oracle很少去提long类型有哪些限制条件,而一般都是通过说明在哪些情况下,可以使用long类型。
正是这些限制阻止了long的使用,oracle也在推出了大对象类型——lob之后,强烈建议用户不要在使用long类型。
限制:
1、一个表中只能包含一个long类型的列。
2、不能索引long类型列。
3、不能将含有long类型列的表作聚簇。
4、不能在sql*plus中将long类型列的数值插入到另一个表格中,如insertinto ...select。
5、不能在sql*plus中通过查询其他表的方式来创建long类型列,如createtable as select。
6、不能对long类型列加约束条件(null、notnull、default除外),如:关键字列(primarykey)不能是long数据类型。
7、long类型列不能用在select的以下子句中:where、groupby、orderby,以及带有distinct的select语句中。
8、long类型列不能用于分布查询。
--整理自网络
