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

Définir le jeu de caractères et le classement d'une table 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 table, 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 lors de la création du tableau :

CREATE TABLE Products ( 
    ProductId CHAR(10), 
    ProductName VARCHAR(255) NOT NULL, 
    PRIMARY KEY (ProductId)) 
    CHARACTER SET latin1 
    COLLATE latin1_general_ci;

Cela crée une table appelée Products avec un latin1 jeu de caractères et une collation de latin1_general_ci .

Modifier une table existante

Voici un exemple de modification du classement et du jeu de caractères sur une table existante :

ALTER TABLE Products 
CONVERT TO CHARACTER SET utf8 COLLATE utf8_spanish_ci;

Il utilise désormais le nouveau classement et le nouveau jeu de caractères.

Il est également possible d'omettre le CONVERT TO partie :

ALTER TABLE Products 
CHARACTER SET utf8 
COLLATE utf8_spanish_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 Products 
CHARACTER SET latin1 
COLLATE utf8_spanish_ci;

Résultat :

ERROR 1253 (42000): COLLATION 'utf8_spanish_ci' is not valid for CHARACTER SET 'latin1'

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 pour 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

Pour VARCHAR ou TEXT colonnes, CONVERT TO CHARACTER SET modifie le type de données si nécessaire pour s'assurer que la nouvelle colonne est suffisamment longue pour stocker autant de caractères que la colonne d'origine.

Par exemple, un ascii TEXT nécessite un seul octet par caractère, la colonne peut donc contenir jusqu'à 65 535 caractères. Si la colonne est convertie en utf8, jusqu'à 3 octets peuvent être requis pour chaque caractère, de sorte que la colonne sera convertie en MEDIUMTEXT (qui a une longueur maximale de 16 777 215) afin qu'il puisse contenir le même nombre de caractères.

Si vous ne voulez pas que de tels changements de type de données aient lieu, utilisez MODIFY sur les colonnes individuelles à la place.

Par exemple :

ALTER TABLE Products 
MODIFY ProductName VARCHAR(255) 
CHARACTER SET utf8; 

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.