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å tabelniveau 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, når du opretter tabellen:
CREATE TABLE Products (
ProductId CHAR(10),
ProductName VARCHAR(255) NOT NULL,
PRIMARY KEY (ProductId))
CHARACTER SET latin1
COLLATE latin1_general_ci;
Det opretter en tabel kaldet Products
med en latin1
tegnsæt og en sammenstilling af latin1_general_ci
.
Ændre en eksisterende tabel
Her er et eksempel på ændring af sortering og tegnsæt på en eksisterende tabel:
ALTER TABLE Products
CONVERT TO CHARACTER SET utf8 COLLATE utf8_spanish_ci;
Den bruger nu den nye sortering og tegnsæt.
Det er også muligt at udelade CONVERT TO
del:
ALTER TABLE Products
CHARACTER SET utf8
COLLATE utf8_spanish_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 Products
CHARACTER SET latin1
COLLATE utf8_spanish_ci;
Resultat:
ERROR 1253 (42000): COLLATION 'utf8_spanish_ci' is not valid for CHARACTER SET 'latin1'
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
For VARCHAR
eller TEXT
kolonner, CONVERT TO CHARACTER SET
ændrer datatypen om nødvendigt for at sikre, at den nye kolonne er lang nok til at gemme lige så mange tegn som den oprindelige kolonne.
For eksempel en ascii TEXT
kolonne kræver en enkelt byte pr. tegn, så kolonnen kan indeholde op til 65.535 tegn. Hvis kolonnen konverteres til utf8, kan der kræves op til 3 bytes for hvert tegn, så kolonnen vil blive konverteret til MEDIUMTEXT
(som har en maksimal længde på 16.777.215), så den vil kunne indeholde det samme antal tegn.
Hvis du ikke ønsker, at sådanne datatypeændringer skal finde sted, skal du bruge MODIFY
på de enkelte kolonner i stedet for.
For eksempel:
ALTER TABLE Products
MODIFY ProductName VARCHAR(255)
CHARACTER SET utf8;
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.