Znakovou sadu a řazení můžete zadat na různých úrovních v MariaDB. Můžete je zadat na úrovni připojení, na úrovni serveru, na úrovni databáze, na úrovni tabulky a dokonce na úrovni sloupce.
Ve svých dotazech můžete také určit řazení, aby přepsalo jakékoli řazení, které bylo dříve zadáno na výše uvedených úrovních.
Chcete-li nastavit znakovou sadu a řazení na úrovni tabulky, použijte CREATE TABLE
nebo ALTER TABLE
příkazu (v závislosti na tom, zda tabulku vytváříte nebo ji upravujete).
Při vytváření tabulky
Zde je příklad nastavení řazení a znakové sady při vytváření tabulky:
CREATE TABLE Products (
ProductId CHAR(10),
ProductName VARCHAR(255) NOT NULL,
PRIMARY KEY (ProductId))
CHARACTER SET latin1
COLLATE latin1_general_ci;
Tím se vytvoří tabulka s názvem Products
s latin1
znaková sada a řazení latin1_general_ci
.
Změnit existující tabulku
Zde je příklad změny řazení a znakové sady na existující tabulce:
ALTER TABLE Products
CONVERT TO CHARACTER SET utf8 COLLATE utf8_spanish_ci;
Nyní používá nové řazení a znakovou sadu.
Je také možné vynechat CONVERT TO
část:
ALTER TABLE Products
CHARACTER SET utf8
COLLATE utf8_spanish_ci;
Řazení musí být platné pro znakovou sadu
Při nastavování řazení i znakové sady se musíte ujistit, že řazení je platné pro vybranou znakovou sadu a naopak. Pokud ne, vrátí se chyba.
Zde je příklad zadání použití neplatného řazení pro zadanou znakovou sadu:
ALTER TABLE Products
CHARACTER SET latin1
COLLATE utf8_spanish_ci;
Výsledek:
ERROR 1253 (42000): COLLATION 'utf8_spanish_ci' is not valid for CHARACTER SET 'latin1'
Říká nám, že naše zvolené řazení není platné pro námi vybranou specifikovanou znakovou sadu.
Viz Úplný seznam porovnávání podporovaných MariaDB nebo Úplný seznam znakových sad podporovaných MariaDB, kde najdete seznam shodných porovnávání a znakových sad.
Zadání pouze řazení nebo znakové sady
Je v pořádku zadat pouze řazení nebo pouze znakovou sadu (nebo žádnou):
- Pokud je poskytnuta pouze znaková sada, použije se výchozí řazení pro tuto znakovou sadu.
- Pokud je poskytnuto pouze řazení, použije se přidružená znaková sada.
- Pokud není poskytnuto řazení ani znaková sada, použije se výchozí tabulka.
Převod na znakovou sadu, která vyžaduje více bajtů
Pro VARCHAR
nebo TEXT
sloupců, CONVERT TO CHARACTER SET
v případě potřeby změní typ dat, aby se zajistilo, že nový sloupec je dostatečně dlouhý, aby se do něj vešlo tolik znaků jako do původního sloupce.
Například ascii TEXT
sloupec vyžaduje jeden bajt na znak, takže sloupec může obsahovat až 65 535 znaků. Pokud je sloupec převeden na utf8, mohou být pro každý znak vyžadovány až 3 bajty, takže sloupec bude převeden na MEDIUMTEXT
(která má maximální délku 16 777 215), takže bude schopna pojmout stejný počet znaků.
Pokud nechcete, aby k takovým změnám datových typů docházelo, použijte MODIFY
místo toho na jednotlivých sloupcích.
Například:
ALTER TABLE Products
MODIFY ProductName VARCHAR(255)
CHARACTER SET utf8;
Převod na binární
CONVERT TO CHARACTER SET binary
převede CHAR
, VARCHAR
a TEXT
sloupců na BINARY
, VARBINARY
a BLOB
resp.
Jakmile to uděláte, tyto sloupce již nebudou mít znakovou sadu. Také na ně již nebude mít vliv budoucí CONVERT TO CHARACTER SET
prohlášení.
Kontrola řazení a znakových sad v MariaDB
Existují různé způsoby, jak zkontrolovat řazení a znakové sady v MariaDB, v závislosti na úrovni, kterou kontrolujete (server, databáze, tabulka, sloupec, připojení atd.). Příklady viz Zobrazit řazení v MariaDB.