|
|
PRATIQUE OUTILS |
|
|
|
Gérer les collations de MySQL |
|
Nécessaires dans le cadre d'applications utilisées à l'international, les collations précisent les règles à appliquer lors de la gestion des contenus. Explications et exemples de requêtes.
(18/01/2006) |
|
|
Forum |
|
Réagissez
dans les forums
de JDN Développeurs
|
Internationalisation et différences de jeux de caractères peuvent
mener à des problèmes profonds, durables, et ardus à découvrir.
Les conflits entre jeux de caractères peuvent ainsi surgir tardivement,
et impliquer deux colonnes, deux tables, ou la base entière.
Le terme collation fait référence au jeu de règles utilisé pour
comparer les données stockées dans deux champs texte. Ces règles
peuvent comprendre, par exemple et pour certains caractères,
l'insensibilité à la casse ou à l'accentuation, ou les correspondances
à caractères multiples (selon les collations, "ö" correspond
à "oe", "ä" à "ae" ou B à "ss").
MySQL reconnaît
ainsi plus 70 collations, s'appliquant à plus de 30 jeux de
caractères. Les jeux de caractères reconnus par une version
donnée de MySQL, ainsi que les collations par défaut leur correspondant,
peuvent être visualisés en lançant la requête SHOW
CHARACTER SET;. Pour connaître les collations possibles
pour un jeu donné, on utilisera SHOW
COLLATION LIKE 'latin1%';.
La définition d'une collation adéquate est donc nécessaire pour
toute base, et MySQL ne propose de passer outre la collation
par défaut, latin1_swedish_ci,
que depuis sa version 4.1. Dans les faits, de nombreux serveurs
où la mise à jour n'a pas été faite ne peuvent maîtriser cet
aspect important de la gestion de contenu.
Si l'application se cantonne à des utilisateurs anglophones
(dont les caractères forment la base du jeu Latin1) ou d'une
langue d'Europe de l'Ouest, la collation par défaut ne saurait
poser problème. Ces problèmes, on s'en doute, surgissent généralement
lorsque la base doit gérer des caractères pour lesquels elle
n'a pas été réglée.
Depuis MySQL 4.1, donc, on peut définir le jeu de caractères
pour chaque base, table, colonne ou même requête.
On pourra réaliser cette définition par défaut, pour chaque
table auxquelles on n'aura pas encore assigné de jeu, par le
biais du fichier de configuration du serveur mysqld,
à savoir my.cnf (ou my.ini
sous Windows) :
character-set-server = euckr
collation-server = euckr_korean_ci
Notez que _ci signifie "case
insensitive" : la collation ne fait pas la différence entre
majuscules et minuscules. Les autres possibilités de
terminaison sont _cs (case
sensitive), _bin (binaire)
ou _uca (collation spécifique
à Unicode).
Lors de la création d'une base, on pourra spécifier son
jeu de caractères, et donc la collation par défaut qui y est
associée, directement dans la requête CREATE
:
CREATE DATABASE nomDeLaBase CHARACTER
SET utf8;
Si l'on souhaite préciser une collation autre que celle par
défaut, on utilisera la directive COLLATE
:
CREATE DATABASE nomDeLaBase CHARACTER
SET cp1256 COLLATE latin2_czech_ci;
Il en est bien sûr de même pour la création de tables
ou de colonnes, ou la sélection de contenu :
CREATE TABLE nomDeLaTable CHARACTER
SET latin1 COLLATE latin1_danish_ci;
CREATE TABLE t1 (
c1 CHAR(10) CHARACTER SET latin1 COLLATE latin1_german1_ci
) DEFAULT CHARACTER SET latin2 COLLATE latin2_bin;
SELECT _latin1'chaine' COLLATE latin1_danish_ci;
Enfin, il est possible d'indiquer en cours de fonctionnement
que l'on change de jeu de caractères ou de collation, avec la
commande SET :
SET NAMES 'utf8'; |
|
|