Jeux de caractères et collation : généralités
Un jeu de caractères est un ensemble de symboles et de codes. Une collation est un ensemble de règles permettant la comparaisons de caractères dans un jeu. Pour rendre ces définitions plus concrètes, voici un exemple avec un alphabet imaginaire.
Supposons que nous avons un alphabet de 4 lettres : ‘A
’, ‘B
’, ‘a
’, ‘b
’. Nous assignons à chaque lettre un nombre comme ceci : ‘A
’ = 0, ‘B
’ = 1, ‘a
’ = 2, ‘c
’ = 3. La lettre ‘A
’ est un symbole, le chiffre 0 est le code de ‘A
’, et la combinaison des quatre lettres et de leur code forme le jeu de caractères.
Maintenant, supposons que nous voulions comparer deux chaînes de caractères : ‘A
’ et ‘B
’. Le plus simple pour cela est de regarder leurs codes : 0 pour ‘A
’ et 1 pour ‘B
’, et comme 0 est inférieure à 1, nous pouvons dire que ‘A
’ est plus petit que ‘B
’. Ce que nous venons de faire est une collation pour notre jeu de caractères. la collation est un ensemble de règle, qui se résume à ceci dans notre cas : “compare les codes”. Cette règle est la plus simple collation binaire.
Si nous devons différentier les majuscules des minuscules, nous aurons au moins deux règles : (1) traiter les minuscules ‘a
’ et ‘b
’ comme des équivalents de ‘A
’ et ‘B
’; (2) puis comparer leurs codes respectifs. Nous appelons cette règle une collation sensible à la casse. C’est un peu plus complexe que la règle précédente.
En réalité, la plupart des jeux de caractères ont de nombreux caractères : ce n’est pas simplement ‘A
’ et ‘B
’ mais des alphabets entiers, ou des systèmes d’écriture orientaux avec des milliers de caractères, incluant des caractères spéciaux et la ponctuation. Dans la vraie vie, une collation a de très nombreuses règles, concernant la sensibilité à la casse ou encore l’insensibilité aux accents (un accent est une marque attachée aux lettres comme le ‘Ö
’) allemand) et les caractères multiples comme le e dans l’o ‘œ
’ = ‘oe
’ de l’une des deux collations allemandes.
MySQL peut faire cela pour vous :
- Stocker des chaînes dans différents jeux de caractères
- Comparer des chaînes à l’aide de différentes collations
- Mélanger différents jeux de caractères et collations sur le même serveur, la même base ou même la même table.
- Permettre la spécification du jeu de caractère et de la collation à n’importe quel niveau
Sous cet angle, MySQL est bien plus souple que les autres bases de données. Mais, pour pouvoir utiliser ces nouvelles fonctionnalités, vous devez savoir quels sont les jeux de caractères et les collations disponibles, comment les modifier ou comment les utiliser avec les opérateurs.
Un exemple de l’effet de collation
Supposons que la colonne X
dans la table T
a ces valeurs de colonne latin1
:
Muffler Müller MX Systems MySQL
Et supposons que les valeurs de la colonne soient récupérées en utilisant la commande suivante :
SELECT X FROM T ORDER BY X COLLATE collation_name;
L’ordre résultant des valeurs pour différentes collations est montré dans cette table :
latin1_swedish_ci |
latin1_german1_ci |
latin1_german2_ci |
Muffler | Muffler | Müller |
MX Systems | Müller | Muffler |
Müller | MX Systems | MX Systems |
MySQL | MySQL | MySQL |
Cette table est un exemple qui montre quel effet cela aurait si l’on utilisait des collations différentes dans une clause ORDER BY
. Le caractère qui pose problème dans cet exemple est le U avec deux points dessus. Les allemands l’appellent U-umlaut, mais nous l’appellerons U-tréma.
- La première colonne montre le résultat de
SELECT
en utilisant la collation Suédoise/Finlandaise, qui dit que le u-tréma est trié comme le Y - La seconde colonne montre le résultat de
SELECT
en utilisant la règle German DIN-1, qui dit que le U-tréma est trié comme le U. - La troisième colonne montre le résultat de
SELECT
en utilisant la règle German DIN-2 qui dit que le u-tréma est trié comme le UE.
Trois collations différentes engendrent trois résultats différents. MySQL est là pour gérer cela. En utilisant la collation appropriée, vous pouvez choisir l’ordre de tri que vous voulez.
Sous SearchServer un exemple pour définir une table acceptant le jeu de caractères windows-arabe :
SET CHARACTER_SET ‘WIN_ARAB’;
SET NORMALIZATION ‘ARABIC’;
SET COLLATION_SEQUENCE ‘LOCALE’;CREATE SCHEMA REPLACE ILS_TBR
CREATE TABLE ILS_TBR
(
LCK_BAS NONE16384 394,
LST_TAG VARCHAR(32) 396,
DATM DATE 798
)NORMALIZATION ‘ARABIC’;
Application dans mysql : tables arabisées avec UTF-8
Base en unicode
CREATE TABLE `t1_test` (
`c1_utf8` varchar(50) character set utf8 default NULL,
`c2_eng` varchar(50) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
—
— Dumping data for table `t1_test`
—
INSERT INTO `t1_test` VALUES (‘كيف الحال’, ‘test2’);
http://electron-libre.fassnet.net/utf8.php
APACHE :
<?php header(“Content-Type: text/html; charset=utf-8”); ?>
HTML :
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
Au niveau codage site web et connexion ajouter au module connexion :
<?php
mysql_connect(“serveur”,”login”,”pass”);
mysql_select_db(“toto_utf”);
//necessaire seulement après la connection
mysql_query(“SET NAMES ‘utf8′”);