Jeśli pochodzisz z języka C, typ ciągu znaków w PostgreSQL to nie tablica znaków.
Dla każdego typu foo
w PostgreSQL istnieje odpowiedni typ tablicy foo[]
który oznacza tablicę wartości typu foo
. Używaj typów tablicowych tylko wtedy, gdy nie planujesz manipulować nimi w dużej mierze w bazie danych; jeśli to zrobisz, zwykle lepiej jest znormalizować tablicę do osobnej tabeli.
Pomijając typy tablic, istnieją różne typy znaków:
-
"char"
(wymagane są podwójne cudzysłowy):pojedynczy znak. Najczęściej używane w tabelach katalogowych. Nie używaj tego typu, chyba że wiesz, co robisz. -
character(n)
lubchar(n)
:ciąg znaków o stałej długości. Bez względu na to, co tam przechowujesz, zawsze będzie wyściełane miejscami po prawej stronie. Zachowanie podyktowane standardem SQL jest czasami zaskakujące, więc rzadko chcesz tego typu. -
text
:ciąg znaków o dowolnej długości. To jest typ, który chcesz dla ciągów znaków, chyba że chcesz, aby baza danych narzuciła limit długości. -
character varying(n)
lubvarchar(n)
:to to samo cotext
z dodatkowym limitem długości.
Aby uzupełnić to przykładem:
CREATE TABLE strtest(
id serial PRIMARY KEY,
sc "char",
c character(10),
vc character varying(10),
vca character varying(10)[]
);
INSERT INTO strtest (sc, c, vc, vca)
VALUES (
'x',
'short',
'short',
ARRAY['short1', 'short2', 'short3']
);
SELECT sc, c, vc, vca[2] FROM strtest;
sc | c | vc | vca
----+------------+-------+--------
x | short | short | short2
(1 row)