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′”);

extradrmtech

Since 20 years I work on Database Architecture and data migration protocols. I am also a consultant in Web content management solutions. I am an experienced web-developer with over 10 years developing PHP/MySQL, C#, VB.Net applications ranging from simple web sites to extensive web-based business applications. When not writing code, I like to dance salsa and swing and have fun with my little family.

You may also like...

Leave a Reply