Project

General

Profile

Demande #5995

Migrer la base données en utf8mb4 pour éviter les crash en cas d'utilisation d'emoji

Added by Victor G/tuxayo 4 months ago. Updated about 1 month ago.

Status:
Nouveau
Priority:
Normale
Assignee:
Target version:
Start date:
10/17/2022
Due date:
% Done:

0%

Estimated time:

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

#1

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.

Also available in: Atom PDF