概念:
char类型:定长字符串,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节)
varchar2类型:可变长的字符串,具体定义时指明最大长度n,这种数据类型可以放数字、字母以及ASCII码字符集(或者EBCDIC
等数据库系统接受的字符集标准)中的所有符号。如果数据长度没有达到最大值n,Oracle 8i会根据数据大小自动调节字段长度
,如果你的数据前后有空格,Oracle 8i会自动将其删去。VARCHAR2是最常用的数据类型。可做索引的最大长度3209。
情况:
在使用varchar2类型时发现,在设定字段unique约束是无法达到约束的目的,经过仔细研究发现varchar2字段在对数据进行匹配
是存在包含末尾空格的情况.
分析:
SQL> create table test2(a char(6));
表已创建。
SQL> insert into test2 values('abc');
已创建 1 行。
SQL> insert into test2 values('bcd ');
已创建 1 行。
SQL> select * from test2 where a='bcd';
A
------
bcd
已选择 1 行。
SQL> select * from test2 where a='bcd ';
A
------
bcd
已选择 1 行。
SQL>alter table test2 modify (a varchar2(6))
表已更改。
SQL> select * from test2 where a='bcd ';
未选定行
SQL> select * from test2 where a='bcd'
未选定行
SQL> select * from test2 where a='bcd '
A
------
bcd
SQL> alter table test2 modify (a char(6));
表已更改。
SQL> select * from test2 where a='bcd';
A
------
bcd
已选择 1 行。
SQL> alter table test2 modify (a char(6));
表已更改。
SQL> select * from test2 where a='bcd';
A
------
bcd
已选择 1 行。
结论:在将char数据类型改为varchar2类型后,oracle将自动添加末尾的空格到字段长度;
varchar2类型转换为char类型,oralce将自动去除数据末尾的空格