oracle字符串类型介绍

 

      Oracle中有4种基本的字符串类型,分别是CHAR、VARCHAR2、NCHAR和NVARCHAR2。在Oracle中,所有串都以同样的格式存储。在数据库块上,最全面都有一个1~3字节的长度字段,其后才是数据,如果数据为NULL,长度字段则表示一个但字节值0xFF。  

      如果一个包含"hello world"的varchar2(80), 块中结构如图所示:   

oracle字符串类型介绍

      如果在char(80)中存储同样的信息,块结构如图所示:

oracle字符串类型介绍

       CHAR/NCHAR实际上只是伪装的VARCHAR2/NVARCHAR2,基于这一点,所以我认为其实只需要考虑这两种字符串类型:VARCHAR和NVARCHAR2。我从来没有见过哪个应用适合使用CHAR类型。因为CHAR类型总是会用空格填充得到的串,使之达到一个固定宽度,所以我们很快就会发现:不论在表段还是任何索引段中,CHAR都会占用最大的存储空间。这就够糟糕的了,避免使用CHAR/NCHAR类型还有另一个很重要的原因:在需要获取这些信息的应用中,CHAR/NCHAR类型还会带来混乱。因为字符串比较的时候,如果带有空格会有影响。使用CHAR除非你非常确定次字段的长度是多少,其他情况一概使用varchar。

 

      假如某一列不是定长数据,最大长度是20。如果我们将这一列定义为char类型。今后我们使用绑定变量进行查询的时候,比如传进来的这一列对应的参数长度为10。SQL类似这种:select * from table_examp where column_exmp = ? 。即使数据库中有对应的数据也会查不出来,原因是数据库中是加了10个空格的数据,传进来的参数是没加空格的。

 

 

 

 

 

 

你可能感兴趣的:(oracle)