Support de Unicode
<<<
UTF8 pour les meta-données Compatibilité avec d'autres bases de données
>>>

11 Jeux de caractères et Unicode
 Manuel de Référence MySQL 4.1 : Version Française

Jeux de caractères et collation : généralités
Jeux de caractères et collation dans MySQL
Déterminer le jeu de caractères et la collation par défaut
Opérations affectées par le support de jeux de caractères.
Support de Unicode
->UTF8 pour les meta-données
Compatibilité avec d'autres bases de données
Nouveau format de fichier de configuration de jeux de caractères
Jeux de caractères national
Préparer le passage de version 4.0 en 4.1
Les jeux de caractères et collation supportés par MySQL.

11.6 UTF8 pour les meta-données

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 ( Jeux de caractères de connexion et collations ), 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.

<< UTF8 pour les meta-données >>
Support de Unicode Jeux de caractères et Unicode Compatibilité avec d'autres bases de données