char和varchar2

来源:互联网 发布:linux安装phpmyadmin 编辑:程序博客网 时间:2024/06/06 19:49

创建一个测试表

 

SQL> create table test(c char(10));

Table created.

SQL>  insert into test values('a');

1 row created.

SQL>  insert into test values('aa');

1 row created.

SQL> insert into test values('aaa');

1 row created.

SQL> commit;

Commit complete.

 

一.chr函数,把ASCII码转换成字符


SQL> select chr(97) from dual;

CH
--
a


 

二.dump函数,查看每一行的内部存储结构

SQL> select dump(c) from test;

DUMP(C)
--------------------------------------------------------------------------------
Typ=96 Len=10: 97,32,32,32,32,32,32,32,32,32
Typ=96 Len=10: 97,97,32,32,32,32,32,32,32,32
Typ=96 Len=10: 97,97,97,32,32,32,32,32,32,32

其中typ=96表示是char类型,len=10表示长度是10,97是字符a(与chr函数一致),32则是空格(char类型不足会使用空格补)。

 

三.这里再建个varchar2的表,插入同样的数据

SQL> create table test_var(c varchar2(10));

Table created.

SQL>  insert into test_var values('a');

1 row created.

SQL> insert into test_var values('aa');

1 row created.

SQL> insert into test_var values('aaa');

1 row created.

SQL> commit;

Commit complete.

 

用dump函数看看他底层的存储结构
SQL> select dump(c) from test_var;

DUMP(C)
--------------------------------------------------------------------------------
Typ=1 Len=1: 97
Typ=1 Len=2: 97,97
Typ=1 Len=3: 97,97,97

 

四.测试下,插入同样的数据后,能不能相等,因为存储结构不同,预计是不相等的

SQL> select c.c "char",v.c "var" from test c join test_var v on c.c=v.c;

no rows selected
果然,不相等。那去掉char填充的空格后是否相等呢?

 

  1* select c.c "char",v.c "var" from test c join test_var v on trim(c.c)=v.c
SQL> /

char                 var
-------------------- --------------------
                   a
aa                   aa
aaa                  aaa
果然,去除空格后,就相等了,呵呵