Du kan angive tegnsættet og sorteringen på forskellige niveauer i MariaDB. Du kan angive dem på forbindelsesniveau, serverniveau, databaseniveau, tabelniveau og endda kolonneniveau.
Du kan også angive en sortering i dine forespørgsler, så den tilsidesætter enhver sortering, der tidligere er blevet specificeret på de førnævnte niveauer.
For at indstille tegnsættet og sorteringen på kolonneniveau skal du bruge CREATE TABLE
sætning eller ALTER TABLE
sætning (afhængigt af om du opretter tabellen eller ændrer den).
Når du opretter tabellen
Her er et eksempel på indstilling af sortering og tegnsæt på en kolonne, når du opretter tabellen:
CREATE TABLE Events (
EventId INT AUTO_INCREMENT NOT NULL,
EventName VARCHAR(255)
CHARACTER SET utf8
COLLATE utf8_spanish_ci,
PRIMARY KEY (EventId)
);
Her specificerede jeg tegnsættet og sorteringen på kolonneniveau. Det er også muligt at sætte dem på tabelniveau.
Ændre en eksisterende kolonne
Her er et eksempel på ændring af sortering og tegnsæt på en eksisterende kolonne:
ALTER TABLE Events
MODIFY EventName VARCHAR(255)
CHARACTER SET latin5 COLLATE latin5_turkish_ci;
EventName
kolonne bruger nu det nye sortering og tegnsæt.
Tjek kolonnen
Der er flere måder at kontrollere sorteringen og tegnsættet for en kolonne på. Her er en:
SELECT
column_name,
character_set_name,
collation_name
FROM information_schema.columns
WHERE table_name = 'Events'
AND column_name = 'EventName';
Resultat:
+-------------+--------------------+-------------------+ | column_name | character_set_name | collation_name | +-------------+--------------------+-------------------+ | EventName | latin5 | latin5_turkish_ci | +-------------+--------------------+-------------------+
Sammenstilling skal være gyldig for tegnsættet
Når du indstiller både sorteringen og tegnsættet, skal du sikre dig, at sorteringen er gyldig for det valgte tegnsæt og omvendt. Hvis ikke, returneres en fejl.
Her er et eksempel på angivelse af brug af en ugyldig sortering for det angivne tegnsæt:
ALTER TABLE Events
MODIFY EventName VARCHAR(255)
CHARACTER SET utf16 COLLATE latin5_turkish_ci;
Resultat:
ERROR 1253 (42000): COLLATION 'latin5_turkish_ci' is not valid for CHARACTER SET 'utf16'
Det fortæller os, at vores valgte sortering ikke er gyldig for vores valgte specificerede tegnsæt.
Se den fulde liste over sorteringer, der understøttes af MariaDB eller den fulde liste over tegnsæt, der understøttes af MariaDB for en liste over matchende sorteringer og tegnsæt.
Kun angivelse af sortering eller tegnsæt
Det er OK kun at angive sorteringen eller kun tegnsættet (eller ingen af delene):
- Hvis kun tegnsættet er angivet, vil standardsorteringen for det pågældende tegnsæt blive brugt.
- Hvis kun sorteringen er angivet, vil det tilknyttede tegnsæt blive brugt.
- Hvis hverken sortering eller tegnsæt er angivet, bruges tabelstandarden.
Konvertering til et tegnsæt, der kræver flere bytes
Det er også muligt at konvertere tegnsættet på tabelniveau. Når du konverterer tegnsættet på tabelniveau, er der en chance for, at MariaDB automatisk konverterer datatypen til en, der er bedre i stand til at håndtere det nye tegnsæt.
Men når vi bruger MODIFY
på de enkelte kolonner og eksplicit specificerer datatypen (som vi gjorde i de foregående eksempler), forhindrer vi MariaDB i at konvertere datatypen.
Konvertering til binær
CONVERT TO CHARACTER SET binary
vil konvertere CHAR
, VARCHAR
og TEXT
kolonner til BINARY
, VARBINARY
og BLOB
henholdsvis.
Når dette er gjort, vil sådanne kolonner ikke længere have et tegnsæt. De vil heller ikke længere blive påvirket af fremtidige CONVERT TO CHARACTER SET
udsagn.
Kontrol af sortering og tegnsæt i MariaDB
Der er forskellige måder at kontrollere sorteringen og tegnsættene i MariaDB, afhængigt af det niveau, du tjekker (server, database, tabel, kolonne, forbindelse osv.). Se Vis sorteringen i MariaDB for eksempler.