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 :
-
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;
|
|