U kunt de tekenset en sortering op verschillende niveaus in MariaDB specificeren. U kunt ze specificeren op verbindingsniveau, serverniveau, databaseniveau, tabelniveau en zelfs kolomniveau.
U kunt ook een sortering in uw zoekopdrachten specificeren, zodat deze alle eerder gespecificeerde sorteringen op de bovengenoemde niveaus overschrijft.
Om de tekenset en sortering op tabelniveau in te stellen, gebruikt u de CREATE TABLE
statement of ALTER TABLE
statement (afhankelijk van of je de tabel aan het maken bent of aanpast).
Bij het maken van de tabel
Hier is een voorbeeld van het instellen van de sortering en tekenset bij het maken van de tabel:
CREATE TABLE Products (
ProductId CHAR(10),
ProductName VARCHAR(255) NOT NULL,
PRIMARY KEY (ProductId))
CHARACTER SET latin1
COLLATE latin1_general_ci;
Dat creëert een tabel met de naam Products
met een latin1
tekenset en een sortering van latin1_general_ci
.
Een bestaande tabel wijzigen
Hier is een voorbeeld van het wijzigen van de sortering en tekenset op een bestaande tabel:
ALTER TABLE Products
CONVERT TO CHARACTER SET utf8 COLLATE utf8_spanish_ci;
Het gebruikt nu de nieuwe sortering en tekenset.
Het is ook mogelijk om de CONVERT TO
. weg te laten deel:
ALTER TABLE Products
CHARACTER SET utf8
COLLATE utf8_spanish_ci;
Collatie moet geldig zijn voor de tekenset
Wanneer u zowel de sortering als de tekenset instelt, moet u ervoor zorgen dat de sortering geldig is voor de gekozen tekenset en omgekeerd. Zo niet, dan wordt er een fout geretourneerd.
Hier is een voorbeeld van het specificeren van een ongeldige sortering voor de opgegeven tekenset:
ALTER TABLE Products
CHARACTER SET latin1
COLLATE utf8_spanish_ci;
Resultaat:
ERROR 1253 (42000): COLLATION 'utf8_spanish_ci' is not valid for CHARACTER SET 'latin1'
Het vertelt ons dat onze gekozen sortering niet geldig is voor onze gekozen gespecificeerde tekenset.
Zie de volledige lijst met door MariaDB ondersteunde sorteringen of de volledige lijst met door MariaDB ondersteunde tekensets voor een lijst met overeenkomende sorteringen en tekensets.
Alleen de sortering of tekenset specificeren
Het is prima om alleen de sortering of alleen de tekenset (of geen van beide) op te geven:
- Als alleen de tekenset is opgegeven, wordt de standaardsortering voor die tekenset gebruikt.
- Als alleen de sortering wordt opgegeven, wordt de bijbehorende tekenset gebruikt.
- Als er geen sortering of tekenset is opgegeven, wordt de standaardtabel gebruikt.
Converteren naar een tekenset die meer bytes vereist
Voor VARCHAR
of TEXT
kolommen, CONVERT TO CHARACTER SET
wijzigt het gegevenstype indien nodig om ervoor te zorgen dat de nieuwe kolom lang genoeg is om net zoveel tekens op te slaan als de oorspronkelijke kolom.
Bijvoorbeeld een ascii TEXT
kolom vereist één byte per teken, dus de kolom kan maximaal 65.535 tekens bevatten. Als de kolom wordt geconverteerd naar utf8, kunnen er maximaal 3 bytes nodig zijn voor elk teken, dus de kolom wordt geconverteerd naar MEDIUMTEXT
(die een maximale lengte heeft van 16.777.215), zodat het hetzelfde aantal tekens kan bevatten.
Als u niet wilt dat dergelijke gegevenstypewijzigingen plaatsvinden, gebruikt u MODIFY
in plaats daarvan op de afzonderlijke kolommen.
Bijvoorbeeld:
ALTER TABLE Products
MODIFY ProductName VARCHAR(255)
CHARACTER SET utf8;
Converteren naar binair
CONVERT TO CHARACTER SET binary
converteert CHAR
, VARCHAR
en TEXT
kolommen naar BINARY
, VARBINARY
en BLOB
respectievelijk.
Zodra dit is gebeurd, hebben dergelijke kolommen geen tekenset meer. Ze worden ook niet langer beïnvloed door toekomstige CONVERT TO CHARACTER SET
verklaringen.
De sortering en tekensets in MariaDB controleren
Er zijn verschillende manieren om de sortering en tekensets in MariaDB te controleren, afhankelijk van het niveau dat u controleert (server, database, tabel, kolom, verbinding, enz.). Zie Toon de sortering in MariaDB voor voorbeelden.