Om du kommer från en C-bakgrund är en teckensträngstyp i PostgreSQL inte en rad tecken.
För varje typ foo
i PostgreSQL finns det en motsvarande arraytyp foo[]
som anger en uppsättning värden av typen foo
. Använd arraytyper endast om du inte planerar att manipulera dem mycket inuti databasen; om du gör det är det vanligtvis bättre att normalisera arrayen till en separat tabell.
Bortsett från arraytyper finns det olika teckentyper:
-
"char"
(dubbla citattecken krävs):ett enda tecken. Används oftast i katalogtabeller. Använd inte den här typen om du inte vet vad du gör. -
character(n)
ellerchar(n)
:teckensträng med fast längd. Oavsett vad du förvarar där kommer den alltid att vara stoppad med mellanslag på höger sida. Beteendet, som dikteras av SQL-standarden, är ibland överraskande, så du vill sällan ha den här typen. -
text
:godtycklig längd teckensträng. Det här är den typ du vill ha för teckensträngar om du inte vill att databasen ska införa en längdbegränsning. -
character varying(n)
ellervarchar(n)
:detta är samma somtext
med en extra längdbegränsning.
För att avrunda det med ett exempel:
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)