char对于不够位数的用空格添补,而varchar和varchar2不用。
varchar和varchar2目前没有本质的区别,但是varchar2是oracle提供的独特的数据类型,oracle保证在任何版本中该数据类型向上和向下兼容,但不保证varchar,因为varchar是标准sql提供的数据类型,有可能随着sql标准的变化而改变。
nvarchar2字节的存储大小是所输入字符个数的两倍;
varchar汉字按着二个字节来存放,非汉字按照一个字节来存储。最大4000
下面的例子说明这个问题:
1 declare
2 emp_name_c char(32);
3 emp_name_v varchar2(32);
4 begin
5 emp_name_c:='www.ncn.cn gototop';
6 emp_name_v:='www.ncn.cn gototop';
7 if rtrim(emp_name_c)=emp_name_v then
8 dbms_output.put_line('The names are the same');
9 else
10 dbms_output.put_line('The names are NOT the same');
11 end if;
12 end;
SQL> /
The names are the same
PL/SQL 过程已成功完成。
SQL> ed
已写入文件 afiedt.buf
1 declare
2 emp_name_c char(32);
3 emp_name_v varchar2(32);
4 begin
5 emp_name_c:='www.ncn.cn gototop';
6 emp_name_v:='www.ncn.cn gototop';
7 if emp_name_c=emp_name_v then
8 dbms_output.put_line('The names are the same');
9 else
10 dbms_output.put_line('The names are NOT the same');
11 end if;
12* end;
SQL> /
The names are NOT the same
PL/SQL 过程已成功完成。