V tomto kurzu se seznámíte se znakovými typy dat PostgreSQL, včetně CHAR
, VARCHAR
a TEXT
, a naučíte se, jak vybrat správné znakové typy pro vaše tabulky: CHARACTER(n)
nebo CHAR(n)
, CHARACTER VARYINGING(n)
nebo VARCHAR(n)
a TEXT
, kde n
je celé kladné číslo.
Následující tabulka ilustruje typy znaků v PostgreSQL:
Znakové typy | Popis |
CHARACTER VARYING(n) , VARCHAR(n) |
proměnná délka s omezením délky |
CHARACTER(n) , CHAR(n) |
pevná délka, s prázdným polštářem |
TEXT , VARCHAR |
proměnná neomezené délky |
Do CHAR(n)
i VARCHAR(n)
lze uložit až n
znaků. Pokud se pokusíte uložit řetězec, který má více než n
znaků, PostgreSQL vyhodí chybu.
Jedinou výjimkou však je, že pokud jsou všechny nadbytečné znaky mezery, PostgreSQL mezery zkrátí na maximální délku (n
) a znaky uloží.
Pokud řetězec explicitně obsadí CHAR(n)
nebo VARCHAR(n)
, PostgreSQL před vložením do tabulky řetězec zkrátí na n
znaků.
Datový typ TEXT
může uložit řetězec neomezené délky.
Pokud u datového typu VARCHAR
nezadáte celé číslo n, chová se stejně jako datový typ TEXT
. Výkonnost VARCHAR
(bez velikosti n
) a TEXT
je stejná.
Jedinou výhodou zadání specifikátoru délky pro datový typ VARCHAR
je, že PostgreSQL vyhodí chybu, pokud se pokusíte do sloupce VARCHAR(n)
vložit řetězec, který má více než n
znaků.
Na rozdíl od VARCHAR
je CHARACTER
nebo CHAR
bez specifikátoru délky (n
) stejný jako CHARACTER(1)
nebo CHAR(1)
.
Na rozdíl od jiných databázových systémů není v PostgreSQL mezi třemi znakovými typy žádný výkonnostní rozdíl.
Ve většině případů byste měli použít TEXT
nebo VARCHAR
. A VARCHAR(n)
použijete, když chcete, aby PostgreSQL kontroloval délku.
Příklady znakových typů PostgreSQL
Podívejme se na příklad, jak fungují datové typy CHAR
, VARCHAR
a TEXT
.
Nejprve vytvořte novou tabulku s názvem znak_testy:
Code language: SQL (Structured Query Language) (sql)
Poté vložte nový řádek do tabulky character_tests
.
Code language: SQL (Structured Query Language) (sql)
PostgreSQL vydala chybu:
Code language: SQL (Structured Query Language) (sql)
To proto, že datový typ sloupce x
je char(1)
a my jsme se pokusili do tohoto sloupce vložit řetězec se třemi znaky. Opravíme to:
Code language: SQL (Structured Query Language) (sql)
PostgreSQL vydává jinou chybu:
Code language: Shell Session (shell)
To proto, že jsme se pokusili vložit řetězec s více než 10 znaky do sloupce y
, který má datový typ varchar(10)
.
Následující příkaz úspěšně vloží nový řádek do tabulky character_tests
.
Code language: SQL (Structured Query Language) (sql)
Code language: SQL (Structured Query Language) (sql)
Code language: Shell Session (shell)
Souhrn
- PostgreSQL podporuje datové typy
CHAR
,VARCHAR
aTEXT
.CHAR
je znakový typ s pevnou délkou, zatímcoVARCHAR
aTEXT
jsou znakové typy s různou délkou. - Použijete
VARCHAR(n)
, pokud chcete před vložením do sloupce nebo aktualizací ověřit délku řetězce (n
). -
VARCHAR
(bez specifikátoru délky) aTEXT
jsou ekvivalentní.
- Byl tento návod užitečný?