sql >> Databáze >  >> RDS >> MariaDB

Nastavte znakovou sadu a řazení sloupce v MariaDB

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 sloupců, 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 u sloupce při vytváření tabulky:

CREATE TABLE Events ( 
    EventId INT AUTO_INCREMENT NOT NULL, 
    EventName VARCHAR(255)
        CHARACTER SET utf8
        COLLATE utf8_spanish_ci, 
    PRIMARY KEY (EventId)
    );

Zde jsem specifikoval znakovou sadu a řazení na úrovni sloupců. Je také možné je nastavit na úrovni stolu.

Změnit existující sloupec

Zde je příklad změny řazení a znakové sady ve stávajícím sloupci:

ALTER TABLE Events 
MODIFY EventName VARCHAR(255) 
CHARACTER SET latin5 COLLATE latin5_turkish_ci;

EventName sloupec nyní používá nové řazení a znakovou sadu.

Zkontrolujte sloupec

Existuje několik způsobů, jak zkontrolovat řazení a znakovou sadu sloupce. Tady je jeden:

SELECT
    column_name, 
    character_set_name, 
    collation_name 
FROM information_schema.columns
WHERE table_name = 'Events'
AND column_name = 'EventName';

Výsledek:

+-------------+--------------------+-------------------+
| column_name | character_set_name | collation_name    |
+-------------+--------------------+-------------------+
| EventName   | latin5             | latin5_turkish_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 Events 
MODIFY EventName VARCHAR(255) 
CHARACTER SET utf16 COLLATE latin5_turkish_ci;

Výsledek:

ERROR 1253 (42000): COLLATION 'latin5_turkish_ci' is not valid for CHARACTER SET 'utf16'

Ří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ů

Je také možné převést znakovou sadu na úrovni tabulky. Při převodu znakové sady na úrovni tabulky existuje možnost, že MariaDB automaticky převede datový typ na typ, který lépe zvládne novou znakovou sadu.

Když však použijeme MODIFY na jednotlivých sloupcích a explicitně specifikujeme datový typ (jako jsme to udělali v předchozích příkladech), zabráníme MariaDB v konverzi datového typu.

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.


  1. Další důvod, proč používat rady NOEXPAND v Enterprise Edition

  2. Jak převést na velká písmena v MariaDB

  3. PHP nenačítá php_pgsql.dll v systému Windows

  4. SQLite Sum() vs Total():Jaký je rozdíl?