Plusieurs variables contrôlent les jeux de caractères et collation du système pour un client. Certaines ont déjà été mentionnées précédemment :
Le jeu de caractères et la collation sont disponibles dans
les variables character_set_server
et
collation_server
.
Le jeu de caractères et la collation par défaut de la base
de données sont disponibles dans
character_set_database
et
collation_database
.
D'autres variables et collations sont impliquées dans la gestion des connexions entre un client et un serveur. Chaque client a un jeu de caractères et une collation attitrés.
Pensez à ce qu'est une "connexion" : c'est ce que vous faites lorsque vous vous connectez au serveur. Le client envoie des SQL commandes comme des requêtes, au travers de la connexion, vers le serveur. Le serveur renvoie des réponses, comme des jeux de résultats, au client, au travers de la connexion. Ceci mène à plusieurs questions telles que :
Dans quel jeu de caractères est la requête lorsqu'elle quitte le client?
Le serveur utilise la variable
character_set_client
pour connaître le
jeu de caractères des requêtes émises par le client.
dans quel jeu de caractère le serveur devrait il traduire la requête après l'avoir re¸ue?
Pour cela, character_set_connection
et
collation_connection
sont utilisées par
le serveur. Il convertit les requêtes envoyées par le
client de character_set_client
en
character_set_connection
(hormis les
chaînes littérales qui sont précédées de
_latin1
ou _utf8
).
collation_connection
est importante pour
les comparaisons de chaînes littérales. Pour les
comparaisons de chaînes avec des colonnes, la collation de
la colonne a la priorité.
Dans quel jeu de caractères le serveur devrait-il traduire les résultats ou messages d'erreur avant de les renvoyer au client?
La variable character_set_results
indique
le jeu de caractères que le serveur utilise pour retourner
les résultats aux clients. Cela inclut les données telles
que les noms de colonnes ou les meta-données.
Vous pouvez configurez ces options là, ou vous pouvez vous fier aux configurations par défaut (auquel cas vous pouvez sauter cette section).
Il y a deux commandes qui permettent de modifier le jeu de caractères de la connexion :
SET NAMES 'charset_name' SET CHARACTER SET charset_name
SET NAMES
indique ce qui est dans la commande
SQL que le client envoie. Par conséquent, SET NAMES
cp1251
indique au serveur : ``les futurs messages
fournis par ce client seront dans le jeu de caractères
cp1251
'' et le serveur est libre de les
traduire dans son propre jeu de caractères, éventuellement.
La commande SET NAMES 'x'
est équivalente à
ces trois commandes :
mysql>SET character_set_client = x;
mysql>SET character_set_results = x;
mysql>SET character_set_connection = x;
SET CHARACTER SET
est similaire, mais
spécifie le jeu de caractères et la collation par défaut des
bases pour la connexion. Une commande SET CHARACTER SET
x
est équivalente à :
mysql>SET character_set_client = x;
mysql>SET character_set_results = x;
mysql>SET collation_connection = @@collation_database;
Lorsque vous exécutez la commande SET NAMES
ou SET CHARACTER SET
, vous changez aussi la
collation de la connexion. Cependant, la collation de connexion
existe uniquement par cohérence. Généralement sa valeur n'a
pas d'importance.
Avec le client mysql
, il n'est pas
nécessaire d'exécuter la commande SET NAMES
à chaque démarrage. Vous pouvez ajouter l'option
--default-character-set-name
dans la ligne de
commande de mysql
, ou dans le fichier
d'options. Par exemple, la ligne suivante est exécutée
automatiquement à chaque démarrage de
mysql
:
[mysql] default-character-set=koi8r
EXEMPLE : supposez que column1
est défini
par CHAR(5) CHARACTER SET latin2
. Si vous
n'indiquez pas SET CHARACTER SET
, alors la
commande SELECT column1 FROM t
retournera les
valeurs de la colonne column1
en utilisant le
jeu de caractères latin2
. Si, d'un autre
coté, vous utilisez la commande SET CHARACTER SET
latin1
, le serveur va alors convertir le résultat de
latin2
en latin1
juste
avant de l'envoyer. De telles conversion sont lentes.
Si vous ne voulez pas que le serveur fasse des conversions,
utilisez la valeur NULL
à
character_set_results
:
mysql> SET character_set_results = NULL;
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.