作者:奥巴马萨达姆_558 | 来源:互联网 | 2014-07-09 16:02
oracle字符串类型介绍Oracle中有4种基本的字符串类型,分别是CHAR、VARCHAR2、NCHAR和NVARCHAR2。在Oracle中,所有串都以同样的格式存储。在数据库块上,最全面都有一个1~3字节的长度字段,其后才是数据,如果数...SyntaxHighlight
oracle字符串类型介绍
Oracle中有4种基本的字符串类型,分别是CHAR、VARCHAR2、NCHAR和NVARCHAR2。在Oracle中,所有串都以同样的格式存储。在
数据库块上,最全面都有一个1~3字节的长度字段,其后才是数据,如果数据为NULL,长度字段则表示一个但字节值0xFF。www.2cto.com
如果一个包含"hello world"的varchar2(80), 块中结构如图所示:
如果在char(80)中存储同样的信息,块结构如图所示:
CHAR/NCHAR实际上只是伪装的VARCHAR2/NVARCHAR2,基于这一点,所以我认为其实只需要考虑这两种字符串类型:VARCHAR和NVARCHAR2。我从来没有见过哪个应用适合使用CHAR类型。因为CHAR类型总是会用空格填充得到的串,使之达到一个固定宽度,所以我们很快就会发现:不论在表段还是任何索引段中,CHAR都会占用最大的存储空间。
这就够糟糕的了,避免使用CHAR/NCHAR类型还有另一个很重要的原因:在需要获取这些信息的应用中,CHAR/NCHAR类型还会带来混乱。因为字符串比较的时候,如果带有空格会有影响。使用CHAR除非你非常确定次字段的长度是多少,其他情况一概使用varchar。 www.2cto.com
假如某一列不是定长数据,最大长度是20。如果我们将这一列定义为char类型。今后我们使用绑定变量进行查询的时候,比如传进来的这一列对应的参数长度为10。SQL类似这种:select * from table_examp where column_exmp = ? 。即使数据库中有对应的数据也会查不出来,原因是数据库中是加了10个空格的数据,传进来的参数是没加空格的。