MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Définir le jeu de caractères et le classement d'une colonne dans MariaDB

Vous pouvez spécifier le jeu de caractères et le classement à différents niveaux dans MariaDB. Vous pouvez les spécifier au niveau de la connexion, au niveau du serveur, au niveau de la base de données, au niveau de la table et même au niveau de la colonne.

Vous pouvez également spécifier un classement dans vos requêtes afin qu'il remplace tout classement précédemment spécifié aux niveaux susmentionnés.

Pour définir le jeu de caractères et le classement au niveau de la colonne, utilisez le CREATE TABLE instruction ou ALTER TABLE déclaration (selon que vous créez la table ou que vous la modifiez).

Lors de la création du tableau

Voici un exemple de définition du classement et du jeu de caractères sur une colonne lors de la création de la table :

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

Ici, j'ai spécifié le jeu de caractères et le classement au niveau de la colonne. Il est également possible de les définir au niveau de la table.

Modifier une colonne existante

Voici un exemple de modification du classement et du jeu de caractères d'une colonne existante :

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

Le EventName la colonne utilise désormais le nouveau classement et le nouveau jeu de caractères.

Vérifiez la colonne

Il existe plusieurs façons de vérifier le classement et le jeu de caractères d'une colonne. En voici un :

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

Résultat :

+-------------+--------------------+-------------------+
| column_name | character_set_name | collation_name    |
+-------------+--------------------+-------------------+
| EventName   | latin5             | latin5_turkish_ci |
+-------------+--------------------+-------------------+

Le classement doit être valide pour le jeu de caractères

Lorsque vous définissez à la fois le classement et le jeu de caractères, vous devez vous assurer que le classement est valide pour le jeu de caractères choisi et vice/versa. Sinon, une erreur est renvoyée.

Voici un exemple de spécification utilisant un classement non valide pour le jeu de caractères spécifié :

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

Résultat :

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

Il nous indique que notre classement choisi n'est pas valide pour le jeu de caractères spécifié que nous avons choisi.

Voir Liste complète des classements pris en charge par MariaDB ou Liste complète des jeux de caractères pris en charge par MariaDB pour une liste des classements et des jeux de caractères correspondants.

Spécifier uniquement le classement ou le jeu de caractères

Vous pouvez spécifier uniquement le classement ou uniquement le jeu de caractères (ou aucun) :

  • Si seul le jeu de caractères est fourni, le classement par défaut de ce jeu de caractères sera utilisé.
  • Si seul le classement est fourni, le jeu de caractères associé sera utilisé.
  • Si aucun classement ni jeu de caractères n'est fourni, la table par défaut est utilisée.

Conversion vers un jeu de caractères nécessitant plus d'octets

Il est également possible de convertir le jeu de caractères au niveau de la table. Lors de la conversion du jeu de caractères au niveau de la table, il est possible que MariaDB convertisse automatiquement le type de données en un type mieux à même de gérer le nouveau jeu de caractères.

Cependant, lorsque nous utilisons MODIFY sur les colonnes individuelles et en spécifiant explicitement le type de données (comme nous l'avons fait dans les exemples précédents), nous empêchons MariaDB de convertir le type de données.

Conversion en binaire

CONVERT TO CHARACTER SET binary convertira CHAR , VARCHAR et TEXT colonnes en BINARY , VARBINARY et BLOB respectivement.

Une fois cela fait, ces colonnes n'auront plus de jeu de caractères. De plus, ils ne seront plus affectés par le futur CONVERT TO CHARACTER SET déclarations.

Vérification du classement et des jeux de caractères dans MariaDB

Il existe différentes façons de vérifier le classement et les jeux de caractères dans MariaDB, selon le niveau que vous vérifiez (serveur, base de données, table, colonne, connexion, etc.). Voir Afficher le classement dans MariaDB pour des exemples.