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

Leave a Reply

Szachy Ursus