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.