Demande #5995
Migrer la base données en utf8mb4 pour éviter les crash en cas d'utilisation d'emoji
0%
Description
Et avoir un support de langues complet. Je crois que c'est pas juste émojis et autres symboles la différence entre utf8mb3(l'ancien défaut) et utf8mb4.
test: mettre un emoji comme 🗨️ dans la description d'un sondage, résultat: page blanche a la dernière étape au lieu d'avoir la création qui marche.
Ticket chez framadate:
https://framagit.org/framasoft/framadate/framadate/-/issues/536
History
Updated by Obitanz . about 1 month ago
- Assignee set to Obitanz .
Procédure inspirée de deux autres :
- une partagée sur le ticket Framagit cité
- et une réalisée sur l'instance de LaToileScoute
1. Préparation
mysqldump date_chapril_org_db > AAAAMMJJ-dump-date-db.sql
2. Procédure
alter database `date_chapril_org_db` character set = utf8mb4 collate = utf8mb4_unicode_ci;
use date_chapril_org_db;
alter table fd_comment convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table fd_framadate_migration convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table fd_poll convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table fd_slot convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table fd_vote convert to character set utf8mb4 collate utf8mb4_unicode_ci;
3. Tests
Créer des sondages en testant de mettre des emoji partout (titre, nom, commentaire, etc.)
4. Retour arrière (au cas où)
Première action : remettre la base en utf8
alter database `date_chapril_org_db` character set = utf8 collate = utf8_general_ci;
use date_chapril_org_db;
alter table fd_comment convert to character set utf8 collate utf8_general_ci;
alter table fd_framadate_migration convert to character set utf8 collate utf8_general_ci;
alter table fd_poll convert to character set utf8 collate utf8_general_ci;
alter table fd_slot convert to character set utf8 collate utf8_general_ci;
alter table fd_vote convert to character set utf8 collate utf8_general_ci;
Si ça ne marche, on restaure la base à l'aide de la sauvegarde
source AAAAMMJJ-dump-date-db.sql
5. Détail technique*
En changeant l'encodage de la bdd, on impacte le nombre de caractères que l'on peut stocker dans les variables. En passant en utf8mb4, on passe de 3 octets à 4 octets par caractère. On a deux types de variable stockant du texte long, ces types sont varchar et text. Pour ce premier, la nouvelle limite est à 191 caractères un seul champ dépasse cette valeur, donc pas de soucis à se faire pour les autres.
Le champ en question est un varchar(256) mais la longueur présente en base ne dépasse pas la nouvelle limite.
Pour les champs en text, la limite est 65535 octets (donc en divisant par 4 on a le nouveaux maximum de caractères : 2^16 / 2^2 = 2^14 = 16384.
Le texte le plus long contient 2206 caractères donc pas de soucis non plus.