Formation PUB200 : MySQL, 2018 Jeux de caractères et interclassements (collations)

5.1 Qu'est-ce qu'un jeu de caractères


Lorsque vous entrez des informations dans la base de données, MySQL utilise un jeu de caractères pour représenter chacun des caractères entrés. Pour les lettres non accentuées et les chiffres, il n'y a aucun problème. Par exemple, lorsque vous entrez un A, peu importe le jeu de caractères utilisé, il sera représenté par le même code puisqu'il fait partie des 128 caractères de base de la charte ASCII.

Mais lorsque vous entrez des caractères accentués ou des symboles, leur représentation peut différer selon le jeu de caractère utilisé. C'est pourquoi il est important de bien choisir le jeu de caractères avant de commencer à entrer des informations dans une base de données. Les programmes utilisant la BD utiliseront le même jeu de caractères pour bien décoder l'information entrée.

Dans le cadre de ce cours, nous travaillerons avec le jeu de caractères UTF-8, qui, selon Wikipédia1 :

est un codage de caractères informatiques conçu pour coder l’ensemble des caractères du « répertoire universel de caractères codés », initialement développé par l’ISO dans la norme internationale ISO/CEI 10646, aujourd’hui totalement compatible avec le standard Unicode, en restant compatible avec la norme ASCII limitée à l’anglais de base (et quelques autres langues beaucoup moins fréquentes), mais très largement répandue depuis des décennies.

Le jeu de caractères peut être défini à différents endroits :

  • Au niveau du serveur : toutes les BD pour lesquelles on ne précise pas le jeu de caractères utiliseront celui défini au niveau du serveur.
  • Au niveau de la base de données : toutes les tables de la BD pour lesquelles on ne définit pas le jeu de caractères utiliseront celui défini au niveau de la base de données.
  • Au niveau de la table : tous les champs pour lesquels on ne définit pas le jeu de caractères utiliseront celui défini au niveau de la table.
  • Au niveau du champ : c'est le niveau le plus précis possible.

Il est toujours possible de vérifier le jeu de caractères utilisé en exportant la base de données. Le script SQL généré indiquera aux différents niveaux le jeu de caractère utilisé.

Ex :

MySQL

CREATE DATABASE IF NOT EXISTS `garage` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

MySQL

CREATE TABLE IF NOT EXISTS `clients` (

  `id` int NOT NULL AUTO_INCREMENT,

  `code` varchar(12) COLLATE utf8_unicode_ci NOT NULL,

  `prenom` varchar(45) COLLATE utf8_unicode_ci NOT NULL,

  `nomfamille` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,

  `adresse` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,

  `adresse2` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,

  `ville` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,

  `codepostal` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL,

  `telephone` varchar(14) COLLATE utf8_unicode_ci DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Il est également possible d'utiliser une requête SQL pour vérifier le jeu de caractères utilisé par défaut utilisé pour le serveur et pour la base de données.

Ex :

MySQL

SELECT @@character_set_server;

Ex :

MySQL

USE garage;

SELECT @@character_set_database;

Source

1. « UTF-8 ». Wikipédia. http://fr.wikipedia.org/wiki/UTF-8

Pour plus d'information

« Jeux de caractères et collations (interclassements) sous MySQL 5 ». Antoine Dinimant. http://slota.free.fr/dl/pdf/Jeux_et_Collations.pdf

«10.1 Character Set Support ». MySQL. http://dev.mysql.com/doc/refman/5.7/en/charset.html

« Comprendre les jeux de caractères et interclassements ». Open Classrooms. http://fr.openclassrooms.com/informatique/cours/comprendre-les-jeux-de-caracteres-et-interclassements

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre