Project

General

Profile

Actions

Demande #5995

closed

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

Added by Victor G/tuxayo about 2 years ago. Updated over 1 year ago.

Status:
Fermé
Priority:
Normale
Assignee:
Start date:
10/17/2022
Due date:
02/08/2023
% Done:

100%

Estimated time:
1:00 h

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

Actions #1

Updated by Obitanz . almost 2 years 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.

Actions #2

Updated by Obitanz . almost 2 years ago

  • Due date set to 02/08/2023
  • Status changed from Nouveau to Résolu
  • % Done changed from 0 to 100
  • Estimated time set to 1:00 h

Procédure déroulée sans accro :

mysqldump date_chapril_org_db > 20230208-dump-date-db.sql
mariadb
MariaDB [(none)]> alter database `date_chapril_org_db` character set = utf8mb4 collate = utf8mb4_unicode_ci;
Query OK, 1 row affected (0,170 sec)

MariaDB [(none)]> use date_chapril_org_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [date_chapril_org_db]> alter table fd_comment convert to character set utf8mb4 collate utf8mb4_unicode_ci;
Query OK, 639 rows affected (14,093 sec)           
Records: 639  Duplicates: 0  Warnings: 0

MariaDB [date_chapril_org_db]> alter table fd_framadate_migration convert to character set utf8mb4 collate utf8mb4_unicode_ci;
Query OK, 13 rows affected (1,117 sec)             
Records: 13  Duplicates: 0  Warnings: 0

MariaDB [date_chapril_org_db]> alter table fd_poll convert to character set utf8mb4 collate utf8mb4_unicode_ci;
Query OK, 749 rows affected (17,790 sec)           
Records: 749  Duplicates: 0  Warnings: 0

MariaDB [date_chapril_org_db]> alter table fd_slot convert to character set utf8mb4 collate utf8mb4_unicode_ci;
Query OK, 4164 rows affected (21,192 sec)              
Records: 4164  Duplicates: 0  Warnings: 0

MariaDB [date_chapril_org_db]> alter table fd_vote convert to character set utf8mb4 collate utf8mb4_unicode_ci;
Query OK, 9501 rows affected (26,905 sec)              
Records: 9501  Duplicates: 0  Warnings: 0

Tests fonctionnels et possibles encore pendant quelques jours sur : https://date.chapril.org/wKm7qc9gaReVSSej

Actions #3

Updated by Quentin Gibeaux over 1 year ago

  • Status changed from Résolu to Fermé
Actions #4

Updated by Pierre-Louis Bonicoli over 1 year ago

  • Target version changed from Backlog to Sprint 2023 février
Actions

Also available in: Atom PDF