Interclassement MySQL pour le français

Quel interclassement (dit aussi collation) choisir pour sa base MySQL afin d’y enregistrer des caractères français (entre autres) ?

L’interclassement a deux fonctions :

  1. Permettre l’ordonnancement correct d’une liste de caractères (pour indiquer que le « é » vient après le « e », ou que les majuscules viennent avant les minuscules, etc)
  2. Permettre de savoir quand un caractère est « équivalent » à un autre (dans les requêtes WHERE que, par exemple, le caractère « e » est équivalent à « E », « é », « è » ou « ê »)

Sur fluxbb on retrouve une très bonne explication. Je copie qu’une partie, mais allez lire cet article vraiment complet :

MySQL permet de choisir comment les données seront classées (ORDER BY) par ce qui est appelé une « collation » (COLLATE). Ceci permet de répondre, par exemple, au problème classique de la sensibilité à la casse :

  • Les majuscules doivent-elles précéder les minuscules, ou bien faut-il considérer A et a comme de même valeur ?
  • La sensibilité aux accents : comptent-ils dans le tri ? Font-ils une différence lors de la recherche ?
  • La possibilité qu’un caractère (ligature oe) puisse correspondre à plusieurs (o suivi de e) : c’est ce qu’Unicode appelle « l’expansion ».

Toutes les collations ont un nom qui commence par le jeu de caractère auquel elles sont liées, et se terminent par l’une de ces trois abréviations :

  • _bin comme binary : les caractères sont dans l’ordre de leurs numéros de code (ce qui donne d’abord toutes les majuscules, puis toutes les minuscules, puis les lettres accentuées, en vrac).
  • _cs comme case sensitive : les caractères sont triés selon le ou les langages de référence, mais de manière sensible à la casse.
  • _ci comme case insensitive : idem, mais en ignorant la casse.

Il est possible de définir plusieurs niveaux : de la colonne jusqu’à toute la base de données. Ainsi on peut définir une collation pour une colonne qui sera différente de celle de la table.

Au final, on peut utiliser utf8_unicode_ci : utf8 indique qu’on peut enregistrer une large palette de caractères (on utilisera utf8mb4 si on souhaite enregistrer des émoticones en plus), unicode_ci va permettre un bon tri tout en ignorant la casse.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*