Les meta-données sont les données sur les données. Tout ce qui
décrit la base de données, par opposition au contenu de la base
de données, sont des meta-données. Ainsi, les noms de colonnes,
les noms de bases de données, les noms d'utilisateur, les noms de
version et la plupart des résultats chaînes de
SHOW
, sont des meta-données.
La représentation des meta-données doit satisfaire les contraintes suivantes :
Toutes les meta-données doivent être dans le même jeu de
caractères. Sinon SHOW
ne fonctionnerait
pas correctement, car des lignes différentes de la même
colonne seraient dans des jeux de caractères différents.
Les meta-données doivent inclure tous les caractères de toutes les langues. Sinon, les utilisateurs ne pourraient pas nommer les colonnes et les tables dans leur langue.
Pour atteindre ces deux objectifs, MySQL enregistre les meta-données dans un jeu de caractères Unicode, nommé UTF8. Cela ne causera pas de perturbation si vous n'utilisez jamais de caractères accentués; mais si vous les utilisez, sachez que les meta-données sont en UTF8.
Cela signifie que les fonctions USER()
et ses
synonymes, SESSION_USER()
et
SYSTEM_USER()
),
CURRENT_USER()
, et VERSION()
auront le jeu de caractères UTF8 par défaut.
Le serveur assigne la variable système
character_set_system
avec le jeu de caractères
des méta-données :
mysql> SHOW VARIABLES LIKE 'character_set_system';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| character_set_system | utf8 |
+----------------------+-------+
Le stockage des méta-données utilisant Unicode ne
signifie pas que les entêtes et les résultats de la
fonction DESCRIBE
seront dans le jeu de
caractères character_set_system
. Lorsque vous
envoyez la commande SELECT column1 FROM t
, le
nom de la colonne column1
sera retourné par le
serveur vers le client dans le jeu de caractères déterminer par
la commande SET NAMES
. Plus spécifiquement, le
jeu de caractères est déterminé par la valeur de la variable
système character_set_results
. Si cette
variable vaut NULL
, aucune conversion n'est
effectuée, et le serveur retourne les données dans leur jeu de
caractères original (tel qu'indiqué par
character_set_system
).
Si vous voulez que le serveur affiche les résultats des
meta-données dans un jeu de caractères autre que UTF8, alors
utilisez SET CHARACTER SET
pour forcer le
serveur faire la conversion (see
Section 10.3.6, « Jeux de caractères et collations de connexion »), ou configurez le client
pour qu'il fasse la conversion. Il est toujours plus efficace de
configurer le client pour qu'il fasse la conversion, mais ce choix
ne sera pas toujours possible pour de nombreux clients jusqu'à
tard dans le cycle des produits MySQL 4.x.
Si vous utilisez seulement, par exemple, la fonction
USER()
pour une comparaison ou une assignation
dans une seule commande... ne vous inquiétez pas. MySQL fera des
conversions automatiques pour vous.
SELECT * FROM Table1 WHERE USER() = latin1_column;
Ceci fonctionnera, car le contenu de
latin1_column
est automatiquement converti en
UTF8 avant la comparaison.
INSERT INTO Table1 (latin1_column) SELECT USER();
Ceci fonctionnera car le contenu de USER()
est
automatiquement converti en latin1
avant
l'assignation. La conversion automatique n'est pas encore
complètement implémentée, mais devrait fonctionner correctement
dans une version ultérieure.
Bien que la conversion automatique ne soit pas un standard SQL, le document de standard SQL dit que chaque jeu de caractères est (en termes de caractères supportés) un "sous-jeu" de l'Unicode.
Comme c'est un principe bien connu que "ce qui s'applique à un super-jeu peut s'appliquer à un sous-jeu", nous croyons que la collation d'Unicode peut s'appliquer à des comparaisons avec des chaînes non-Unicode.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.