Drupal se déplace pour prendre en charge utf8mb4, cependant, il utilise utf8nb4_general_ci. Pourquoi prendre le temps de se déplacer pour le soutenir, puis de ne pas le soutenir pleinement? Y a-t-il une raison spécifique, ou continue simplement utf8_general_ci de la précédente?
Y aurait-il des problèmes à ignorer cela et à utiliser de toute façon unicode?
Ticket Drupal: le pilote MySQL ne prend pas en charge le plein UTF-8 (emojis, symboles asiatiques, symboles mathématiques)
Voici un question sur l'échange de pile qui dit vraiment qu'il n'y a aucune raison de ne pas utiliser unicode de nos jours et enfin, sur ce question , il dit "utf8_general_ci est un classement hérité qui ne prend pas en charge les extensions, les contractions ou les caractères ignorables. "
Je note que WordPress utilise utf8mb4_unicode_ci.
Il me semble que la recommandation est dépassée et que utf8mb4_unicode_ci
fonctionnera sans problème. Il est utilisé par beaucoup de gens depuis longtemps.
Il y a une différence entre changer le jeu de caractères de utf8
à utf8mb4
(pour prendre en charge plus de points de code) et changer le classement de general_ci
à unicode_ci
(pour obtenir un tri plus précis). Les deux changements peuvent provoquer leurs propres problèmes, il est donc logique de faire les deux indépendamment.
utf8mb4
est utilisé par défaut depuis 8.0.0-beta12 . Le problème principal semblait être un changement des limites de longueur des clés pour InnoDB, mais si je comprends bien, utf8mb4
aurait dû fonctionner avec le moteur MyISAM par défaut avant même ce changement.
Passer à unicode_ci
ne devrait pas poser de problème, mais peut modifier de manière inattendue l'ordre de tri pour certains sites.
Le paramètre de classement par défaut est juste un par défaut et les modules peuvent choisir leurs propres classements de toute façon s'ils en ont besoin. Je n'ai également trouvé aucune documentation indiquant que les modules devraient s'attendre à un certain classement. Le guide d'installation de la base de données manque juste une déclaration claire sur les classements pris en charge et est incohérent:
Dans la section sur phpMyAdmin, il est dit que vous devez
Assurez-vous de sélectionner COLLATION utf8_general_ci
Plus loin dans la section sur l'installation à partir de la ligne de commande, general_ci
ne semble pas être nécessaire et tout classement UTF-8 fera l'affaire:
Remarque: La base de données doit être créée avec le codage UTF-8 (Unicode), par exemple utf8_general_ci.
De plus, PostgreSQL est pris en charge et il semble que son classement UTF-8 par défaut soit équivalent à utf8mb4_unicode_ci
, donc utiliser ça avec MySQL devrait être bien aussi.
Le lien ci-dessous pour poster explique que utf8mb4_unicode_ci est meilleur que utf8mb4general_ci (qui est un peu plus rapide) car le second a des problèmes dans l'ordre de tri dans certaines langues: https://stackoverflow.com/a/766996/860099