MYSQL, Encodage et Collation

Pour une prise en charge des dernières évolutions en termes de caractères, optez pour un encodage de votre base de données en utf8mb4.
Le principal avantage de l'utf8mb4 par rapport au vieillissant utf8, est la prise en charge des émojis/smileys.

En ce qui concerne le choix de la Collation, les différences se situent dans la manière dont le texte est trié ou comparé.

Pour une prise en charge de l'Unicode 9 (version actuelle publiée en 2016), il est conseillé d'opter pour la Collation utf8mb4_0900_ai_ci.
utf8mb4 et utf8mb4_0900_ai_ci sont d'ailleurs les paramètres par défaut depuis MySQL 8.0.1.

Pour une compatibilité optimale entre différentes version de MySQL, optez pour utf8mb4_unicode_ci.

Si vous devez trier ou comparer les accents et/ou les majuscules sur une version MySQL antérieur à 8, optez pour utf8mb4_bin. Optez pour utf8mb4_unicode_520_ci si la casse n'a pas d'importance.


Avantages de l'utf8mb4_0900_ai_ci

Très rapide, il ne prend pas en compte les caractères accentués, ni les majuscules dans le tri. Les "è, é, ê, ë, È, É, Ê, Ë" seront considérés et donc triés comme des "e".

Si vous avez besoin du tri des caractères accentués et des majuscules, optez pour la Collation utf8mb4_0900_as_cs (la signification des suffixes est renseigné plus bas).


Différences entre utf8mb4_general_ci et utf8mb4_unicode_ci

Pour faire court :

utf8mb4_general_ci

Rapide, mais ne respecte pas trop le tri des caractères comme le voudrait les règles UNICODE.

Exemple de tri utf8mb4_general_ci
"Œ" est trié en tant que "E"
Le Eszett allemand "ß" est classé comme un "S"

utf8mb4_unicode_ci

Plus lent, mais respectueux du tri des caractères des différents alphabets selon les règles officielles de l'UNICODE.

Exemple de tri utf8mb4_unicode_ci
"Œ" est trié en tant que "O"
Le Eszett allemand "ß" est classé en "SS" (lol)

Les différences de rapidité sont plus importantes dans les alphabets autre que latins, asiatiques par exemple.
A savoir qu'avec la puissance actuelle des serveurs, ces différences sont aujourd'hui négligeables.


Aller plus loin

Collation se traduit par tri ou classement.

En typographie, lorsque l'on parle de "casse" (case en anglais), il s'agit de majuscules et de minuscules.
Pour les curieux : La casse typographique sur Wikipedia.

Signification des suffixes dans les Collations

Avec pour exemple utf8mb4_0900_ai_ci et utf8mb4_0900_as_cs :

  • _900 = prend en charge l'UNICODE version 9.0.0
  • _ai = Insensible aux accents
  • _as = Sensible aux accents
  • _ci = Insensible à la casse
  • _cs = Sensible à la casse

Si vous avez le temps de flâner, parcourez la liste des caractères UNICODE 900 (rien que l'alphabet "latin" comporte ~ 1 500 variantes).
Liste des caractères UNIODE version 9

Pour vous sensibiliser à la complexité de la tâche, quelques exemples de différences de tri alphabétique entre différents pays *.

En suédois "z" apparait avant "ö"
Par contre, en allemand "ö" apparait avant le "z"

Dans le dictionnaire allemand, "öf" apparait avant "of"
Par contre dans un annuaire téléphonique allemand, "of" apparaitra avant "öf"
🤪

(*) MySQL se base sur la variable système lc_time_names (fr_FR pour la France) pour trier les caractères.

Tout savoir sur l'Unicode

Les émojis les plus utilisés :
😂 ❤️ 😍 🤣 😊 🙏 💕 😭 😘
La liste complète


Conclusion

Si vous êtes sous MySQL 8.0.1 ou supérieur, optez pour la Collation utf8mb4_0900_ai_ci (ou utf8mb4_0900_as_cs si le tri des majuscules et caractères accentués doit être pris en charge).

Si votre version de MySQL est inférieure à 8.0.1, optez pour utf8mb4_unicode_ci (qui était la Collation par défaut), ça fonctionnera parfaitement dans la grande majorité des cas.


Nos émojis favoris

🪓

Axe

🍻

Clinking beer mugs

🥐

Croissant

🇫🇷

France

🐸

Frog

🌍

Globe showing Europe-Africa

🌐

Globe with meridians

🛖

Hut

🖕

Middle finger

💰

Money bag

🛵

Motor scooter

🍄

Mushroom

🦉

Owl

🦜

Parrot

🪠

Plunger

🥨

Pretzel

🧻

Roll of paper

🦥

Sloth

🩴

Thong Sandal

🚽

Toilet

Les émojis n'apparaissant pas ne sont pas encore pris en charge pas le navigateur, mais ça va venir...


Publication : samedi 30 octobre 2021 à 20:45
Mis à jour : samedi 30 octobre 2021 à 21:07
Article vue 2735 fois

MYSQL, Encodage et Collation
Haut de page