ORACLE中的char和vchar类型

       在Oracle数据表和程序类型中,字符类型可能是使用最多的一种了。从历史上看,Oracle首先推出了固定长度char类型字段,之后才推出了变长度类型varchar2。目前,主流Oracle应用开发都已经普遍接受了varchar2作为数据表字段类型表示。如果存在超长字符,都考虑使用CLOB这类大对象进行存储。
但是,我们在实际领域中,还是会在各种遗留系统中发现很多char类型字段。而且连带这些遗留系统的下游系统中,char类型也会经常出现。在这样的背景下,开发运维人员其实还是有很多的接触char的机会的。
      Char最大的特点就是固定长度存储,例如定义长度char(10),保存的字符串为’kkk’三位长度。在保存的时候,Oracle会自动将其尾部补齐空格。这样就确保了每个保存在char(10)的字段都是10位长度。根据笔者的猜测,char的策略是在Oracle对于存储空间管理能力较弱的背景下提出的一种折中策略。随后,varchar2的出现逐步将这种变通策略加以替代。
      在一些时候,笔者还是会遇到一些朋友的问题:明明检索全表时候看到字符串取值是xxx,但是用SQL加在后面where条件的时候,就没有检索结果,仿佛“见鬼一样”。究其根源,常常是char在里面“捣乱”,where条件后面加上若干个空格或者使用rpad命令进行补全。

原文对char和vchar的实验: http://m.blog.itpub.net/17203031/viewspace-1995037/
结论:
ü  对char类型,优化器方面会有一定的优化动作,主要在于末尾空格的自动补齐动作;
ü  但是,自动补齐动作出现的条件是类型的匹配,就是进行比较时候变量类型一定是char类型;
ü  如果是varchar2类型,自动补齐动作是不会出现的;
ü  很多字符串相关函数的返回值,都是varchar2类型。

猜你喜欢

转载自blog.csdn.net/u010760374/article/details/81170695