sql >> Database >  >> RDS >> MariaDB

Stel de tekenset en sortering van een tabel in MariaDB in

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.


  1. Hoe maak je een gepartitioneerde PostgreSQL-reeks?

  2. De prijs van niet zuiveren

  3. Wat is de maximale lengte van een tabelnaam in Oracle?

  4. Controleer de databaseverbinding met pg-promise bij het starten van een app