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 :
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 :
CREATE DATABASE IF NOT EXISTS `garage` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
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 :
SELECT @@character_set_server;
Ex :
USE garage;
SELECT @@character_set_database;
1. « UTF-8 ». Wikipédia. http://fr.wikipedia.org/wiki/UTF-8
« 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é