创建一个测试表
SQL> create table test(c char(10));
Table created.
SQL>
1 row created.
SQL>
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>
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填充的空格后是否相等呢?
SQL> /
char
-------------------- --------------------
a
aa
aaa
果然,去除空格后,就相等了,呵呵