char vs. varchar2 datatype
Do przechowywania danych textowych Oracle używa wielu typów danych:
- char
- varchar
- varchar2
- clob
- nclob
- ect..
Najczęściej uzywane są char i varchar2. Char jest typem danch o stałej długości. Niewypełniona przestrzeń jest automatycznie wypełniana spacjami ( chr(32) ). Varchar2 jest typem o zmiennej długości. Pozwala to na osczędność przestrzeni do przechowywanie.
Spójrzmy na przykład:
create table gmt ( a char(3), b varchar2(3) );
insert into gmt values ( ‘A’ ,‘A’ );
insert into gmt values ( ‘AAA’,‘AAA’);
insert into gmt values ( null ,null );
Sprawdźmy co jest w środku:
select ‘:’||a||‘:’ a, ‘:’||b||‘:’ b from gmt;
A B
—– —–
:A : :A:
:AAA: :AAA:
:: ::
select * from gmt where a = ‘A’;
A B
— —
A A
select * from gmt where a = ‘A ‘;
A B
— —
A A
select * from gmt where a = ‘A ‘;
A B
— —
A A
select * from gmt where a = ‘A ‘;
A B
— —
A A
Dla powyższych zapytań Oracle dodał spacje tak by porównywane łąńcuchy miały taką samą długość. Poniższe zapytanie pokazuje ten mechanizm:
select ‘X’ from dual where ‘A’ = ‘A ‘;
‘
-
X