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 TEXTnebo 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,VARCHARaTEXT.CHARje znakový typ s pevnou délkou, zatímcoVARCHARaTEXTjsou 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) aTEXTjsou ekvivalentní.
- Byl tento návod užitečný?