web-dev-qa-db-fra.com

Pourquoi la table CHARSET est-elle définie sur utf8mb4 et COLLATION sur utf8mb4_unicode_520_ci

J'ai récemment remarqué que, chaque fois que je lance un nouveau projet WordPress, le classement de mes tables passe automatiquement de utf8_unicode_ci (que je sélectionne lorsque je crée une nouvelle base de données à partir de phpMyAdmin) vers utf8mb4_unicode_520_ci.

De plus, j'ai remarqué dans phpMyAdmin sous "Paramètres généraux" que le classement de connexion au serveur par défaut est utf8mb4_unicode_520_ci.

J'utilise MySQL Server 5.7.17 et phpMyAdmin 4.6.6 sur Ubuntu 17.04.

Mes questions sont les suivantes:

  1. Pourquoi cela arrive-t-il?
  2. Si possible, comment puis-je éviter cela? À cause de utf8mb4 J'ai rencontré des problèmes lors de la migration des sites WP vers un ancien serveur MySQL qui ne le prend pas en charge.
  3. Le point 2. est-il conseillé? Y a-t-il des avantages à utiliser charset utf8mb4 plus de utf8 et collation utf8mb4_unicode_520_ci plus de utf8_unicode_ci?
13

Dans le passé, il n'y avait que utf8à l'avenir, utf8mb4 sera le jeu de caractères par défaut. maintenant utf8mb4 est le jeu de caractères par défaut.

Dans le passé, _general_ci Était le classement par défaut; alors _unicode_ci (Unicode 4.0) était mieux, puis _unicode_520_ci (Unicode 5.20). À l'avenir (MySQL 8.0), la valeur par défaut sera _0900_ci_ai (Unicode 9.0).

Pendant ce temps, la route est pleine de nids de poule générés par les erreurs passées de MySQL. Et WP les designers conduisent dans un gros réservoir qui ne remarque pas les nids de poule.

MySQL 5.6 était un gros nid-de-poule qui a englouti de nombreux utilisateurs WP en raison d'une limite de 767 sur les index avec WP index sur la fonction VARCHAR(255) et la possibilité d'utiliser utf8mb4. Vous l'avez bien dépassé en ayant 5.7.17. (Votre futur passage à 8.0 sera moins cahoteux.)

C'est-à-dire que les bases de données/tables/colonnes nouvellement créées sur 5.7.7+ ne devraient pas rencontrer le problème 767, mais les choses migrées depuis des versions plus anciennes (5.5.3+) peuvent avoir des problèmes, surtout si quelque chose vous amène à passer à utf8mb4.

Que faire? Je vais probablement manquer d'espace en essayant de préciser toutes les options. Fournissez donc l'historique des données, le chemin de mise à niveau (le cas échéant), les paramètres actuels, le ROW_FORMAT Des tableaux, le CHARACTER SET Et le COLLATION des colonnes, le sortie de SHOW VARIABLES LIKE 'char%';

Où devriez-vous être? Pour 5.7.7+, utf8mb4 Et utf8mb4_unicode_520_ci Dans la mesure du possible. Ce jeu de caractères vous donne Emoji et tout le chinois (utf8 ne le fait pas). Ce classement est le meilleur disponible, bien que vous ayez du mal à remarquer où cela compte.

Remarque: la première partie du nom du classement est le seul jeu de caractères avec lequel il fonctionne. Autrement dit, utf8_unicode_ci Ne fonctionne pas avec utf8mb4.

30
Rick James