| 11.3 Déterminer le jeu de caractères et la collation par défaut
 11 Jeux de caractères et Unicode
 Manuel de Référence MySQL 4.1 : Version Française
 
 . Jeu de caractères et collation serveur
 . Jeu de caractères et collation de base de données
 . Jeu de caractères de tables et collation
 . Jeu de caractères de colonne et collation
 . Exemples d'attribution de jeu de caractères et collation
 ->Jeux de caractères et collations de connexion
 . Jeu de caractères et collation des chaînes littérales
 . Clause COLLATE dans différentes parties d'une requête SQL
 . COLLATE clause de précédence
 . Opérateur BINARY
 . Quelques cas spéciaux où la détermination de la collation est difficile
 . Les collation doivent correspondre au bon jeu de caractères
 . Un exemple de l'effet de collation
 
 
 | 
  11.3.6 Jeux de caractères et collations de connexion 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 :  
 
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.
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
 . 
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
  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 :| 
SET NAMES 'charset_name'SET CHARACTER SET charset_name
 | 
 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 character_set_connection = x;
 | 
 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.| 
mysql> SET character_set_client = x;mysql> SET character_set_results = x;
 mysql> SET collation_connection = @@collation_database;
 | 
 
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
  :
 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.| 
[mysql]default-character-set=koi8r
 | 
 
Si vous ne voulez pas que le serveur fasse des conversions, utilisez
la valeur  
NULL
  à  
character_set_results
  :
 | 
mysql> SET character_set_results = NULL;
 | 
 |