V případě, že pocházíte z prostředí C, typ znakového řetězce v PostgreSQL není pole znaků.
Pro každý typ foo
v PostgreSQL existuje odpovídající typ pole foo[]
který označuje pole hodnot typu foo
. Používejte typy polí pouze v případě, že s nimi v databázi neplánujete příliš manipulovat; pokud tak učiníte, je obvykle lepší normalizovat pole do samostatné tabulky.
Pomineme-li typy polí, existují různé typy znaků:
-
"char"
(uvozovky jsou povinné):jeden znak. Většinou se používá v katalogových tabulkách. Tento typ nepoužívejte, pokud nevíte, co děláte. -
character(n)
nebochar(n)
:řetězec znaků s pevnou délkou. Bez ohledu na to, co tam uložíte, bude vždy na pravé straně polstrované mezerami. Chování, jak ho diktuje standard SQL, je někdy překvapivé, takže tento typ málokdy chcete. -
text
:řetězec znaků libovolné délky. Toto je typ, který chcete pro řetězce znaků, pokud nechcete, aby databáze zavedla omezení délky. -
character varying(n)
nebovarchar(n)
:je to stejné jakotext
s dalším omezením délky.
Abych to završil příkladem:
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)