Migration vers PHP7 de mon site WordPress

By | 30 août 2019 |

Je vous écris ce petit billet afin de partager mes déboires lors de la migration vers PHP7 de mon site WordPress et peut être vous éviter des sueurs froides.
Peut-être que certains d’entre vous l’ont remarqué mais la migration a connu un léger raté…

Déclic de la migration vers PHP7

Probablement comme pas mal d’utilisateurs de WordPress, j’ai été confronté à ce message d’avertissement dans mon espace administration:

Tableau de bord - Avertissement pour migration vers PHP7
Tableau de bord – Avertissement pour migration vers PHP7

Et là je qualifierais ma première réaction de surprise, comme je tiens mon vps à jour grâce à des scripts hebdomadaires, je m’attends à ce que ma version de PHP soit à jour.
De ce pas, je me connecte donc en ssh sur mon vps, et vérifie la version de PHP avec la commande « php -v » qui m’informe que j’ai bien la version 7.3

Vérification version de PHP avant migration vers PHP7
version de PHP

hmmm, vérifions donc le module chargé dans apache:

$ ls /etc/apache2/mods-enabled

Et là en effet, je m’aperçoit que c’est le module PHP5 qui est pour le moment utilisé et donc que le message dans mon tableau de bord est tout à fait justifié.

Migration vers PHP7

Dés lors je vérifie si le module PHP7 est disponible:

$ ls /etc/apache2/mods-availabe

C’est bien le cas, j’ai même deux modules disponibles php7.0 et php7.3
Dés lors, je me dis « bahh suffit de décharger ce module, de charger le module php7.3 et relancer apache » et je fonce tête baissée

$ sudo a2dismod php5
$ sudo a2enmod php7.3
$ sudo systemctl restart apache2

Les commandes exécutées, je recharge la page, navigue un peu, tout est bon.. tranquille…
Jusque.. quand je commence à repérer des caractères « bizarres ».

Caractères accentués

En y portant plus attention, je remarque que ces caractères remplacent tous les caractères accentués (é, è, à, …).
Je fais donc quelques recherches afin d’identifier si c’est un problème connu lors de migration vers PHP7.
Mes recherches ne portant pas vraiment de fruits, et le site étant live avec des caractères « bizarres ». Je décide donc de faire le chemin inverse en réactivant le module PHP5.

$ sudo a2dismod php7.3
$ sudo a2enmod php5
$ sudo systemctl restart apache2

Et là après un pic de stress, probablement dû au « caching », je m’aperçois que finalement tout rentre dans l’ordre.
Il y a donc une différence lorsque les caractères sont lus dans la base de données selon la version de PHP.
J’oriente donc mes recherches sur le « charset », et de sa défintion au niveau

  • de la page html/php
  • des paramètres php de connexion à la base de données
  • de la db
  • des tables de la db
  • des colonnes de la db

PHPMyAdmin

Afin d’y voir plus clair, je sauvegarde ma db et l’importe localement dans PHPMyAdmin.
C’est là que je découvre que dans ma db:

  • les caractères accentués ne sont pas bien enregistrés
  • l' »interclassement » est définit sur « latin1_swedish_ci » là où je m’attendais à « utf8 » ou même « utf8mb4_general_ci ».

Le plus logique me semble donc de corriger les données à la source afin d’avoir les données stockées correctement dans la base de données.

PHPMyAdmin - Interclassement - migration vers PHP7
PHPMyAdmin – Interclassement

Je décide donc de convertir les colonnes, les tables et la base de données vers l’interclassement « utf8mb4_general_ci ».
Je fais quelques essais sur la table wp_posts,

Mise à jour wp_posts - post_title
Mise à jour wp_posts – post_title
Confirmation pour la conversion
Confirmation pour la conversion

les essais étant concluant, je me dis créons un petit script SQL.
Ce sera plus rapide que de se coltiner l’UI de PHPMyAdmin pour mettre à jour toutes les colonnes, tables.

Script SQL

Fort de mes tests dans l’UI de PHPMyAdmin,
j’enchaîne les lignes gaiement dans mon script afin de convertir toutes les colonnes:

ALTER TABLE `wp_posts` CHANGE `post_title` `post_title` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
ALTER TABLE `wp_posts` CHANGE `post_content` `post_content` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `post_excerpt` `post_excerpt` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
...

J’exécute le script et … patatra.. un message d’erreur:

Mysql - 1067 - Valeur par défaut invalide pour 'post_date'
Mysql – 1067 – Valeur par défaut invalide pour ‘post_date’

Celle-ci est liée à la version de MySQL et aux modes activés,
plus particulièrement les modes:

  • NO_ZERO_IN_DATE
  • NO_ZERO_DATE
MySQL - Modes
MySQL – Modes

Je rajoute donc la ligne suivante au début de mon script pour éviter cette erreur:

SET SESSION sql_mode = '';

Et là je me dis, c’est bon maintenant, je tourne le script..
Pas de message d’erreur tout heureux mais j’ai vite déchanté..
Pas de changement non plus dans la base de données, toujours ces maudits caractères 🙁

Rebelote recherche sur le net, selon maître google, il faudrait passer par un type binaire.
En gros faire une conversion en 2 étapes:

  • TEXT –> BLOB –> TEXT
  • LONGTEXT –> LONGBLOB –> LONGTEXT
  • CHAR –> BINARY –> CHAR
  • VARCHAR –> VARBINARY –> VARCHAR

Ok j’ai rien à perdre, je mets donc à jour mon script et fais un essai pour la table wp_posts:

SET SESSION sql_mode = '';
alter table `wp_posts` change `post_title` `post_title` BLOB;
ALTER TABLE `wp_posts` CHANGE `post_title` `post_title` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
alter table `wp_posts` change `post_content` `post_content` LONGBLOB;
ALTER TABLE `wp_posts` CHANGE `post_content` `post_content` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `post_excerpt` `post_excerpt` BLOB;
ALTER TABLE `wp_posts` CHANGE `post_excerpt` `post_excerpt` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `post_status` `post_status` VARBINARY(20);
ALTER TABLE `wp_posts` CHANGE `post_status` `post_status` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `comment_status` `comment_status` VARBINARY(20);
ALTER TABLE `wp_posts` CHANGE `comment_status` `comment_status` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `ping_status` `ping_status` VARBINARY(20);
ALTER TABLE `wp_posts` CHANGE `ping_status` `ping_status` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `post_password` `post_password` VARBINARY(255);
ALTER TABLE `wp_posts` CHANGE `post_password` `post_password` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `post_name` `post_name` VARBINARY(200);
ALTER TABLE `wp_posts` CHANGE `post_name` `post_name` VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `to_ping` `to_ping` BLOB;
ALTER TABLE `wp_posts` CHANGE `to_ping` `to_ping` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `pinged` `pinged` BLOB;
ALTER TABLE `wp_posts` CHANGE `pinged` `pinged` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `post_content_filtered` `post_content_filtered` LONGBLOB;
ALTER TABLE `wp_posts` CHANGE `post_content_filtered` `post_content_filtered` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `guid` `guid` VARBINARY(255);
ALTER TABLE `wp_posts` CHANGE `guid` `guid` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `post_type` `post_type` VARBINARY(20);
ALTER TABLE `wp_posts` CHANGE `post_type` `post_type` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `post_mime_type` `post_mime_type` VARBINARY(100);
ALTER TABLE `wp_posts` CHANGE `post_mime_type` `post_mime_type` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;

Et… EUHREKA ! Les caractères accentués sont sauvés dans la Db pour cette table. Je continue et mets à jour le reste du script.
Finalement je l’exécute, tout se passe bien on se rapproche du grand moment.. La mise à jour de la Db et la migration vers PHP7.
Mon script complet:

SET SESSION sql_mode = '';
alter table `wp_posts` change `post_title` `post_title` BLOB;
ALTER TABLE `wp_posts` CHANGE `post_title` `post_title` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
alter table `wp_posts` change `post_content` `post_content` LONGBLOB;
ALTER TABLE `wp_posts` CHANGE `post_content` `post_content` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `post_excerpt` `post_excerpt` BLOB;
ALTER TABLE `wp_posts` CHANGE `post_excerpt` `post_excerpt` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `post_status` `post_status` VARBINARY(20);
ALTER TABLE `wp_posts` CHANGE `post_status` `post_status` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `comment_status` `comment_status` VARBINARY(20);
ALTER TABLE `wp_posts` CHANGE `comment_status` `comment_status` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `ping_status` `ping_status` VARBINARY(20);
ALTER TABLE `wp_posts` CHANGE `ping_status` `ping_status` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `post_password` `post_password` VARBINARY(255);
ALTER TABLE `wp_posts` CHANGE `post_password` `post_password` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `post_name` `post_name` VARBINARY(200);
ALTER TABLE `wp_posts` CHANGE `post_name` `post_name` VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `to_ping` `to_ping` BLOB;
ALTER TABLE `wp_posts` CHANGE `to_ping` `to_ping` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `pinged` `pinged` BLOB;
ALTER TABLE `wp_posts` CHANGE `pinged` `pinged` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `post_content_filtered` `post_content_filtered` LONGBLOB;
ALTER TABLE `wp_posts` CHANGE `post_content_filtered` `post_content_filtered` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `guid` `guid` VARBINARY(255);
ALTER TABLE `wp_posts` CHANGE `guid` `guid` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `post_type` `post_type` VARBINARY(20);
ALTER TABLE `wp_posts` CHANGE `post_type` `post_type` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_posts` CHANGE `post_mime_type` `post_mime_type` VARBINARY(100);
ALTER TABLE `wp_posts` CHANGE `post_mime_type` `post_mime_type` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;

ALTER TABLE `wp_comments` CHANGE `comment_author` `comment_author` TINYBLOB;
ALTER TABLE `wp_comments` CHANGE `comment_author` `comment_author` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_comments` CHANGE `comment_author_email` `comment_author_email` VARBINARY(100);
ALTER TABLE `wp_comments` CHANGE `comment_author_email` `comment_author_email` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_comments` CHANGE `comment_author_url` `comment_author_url` VARBINARY(200);
ALTER TABLE `wp_comments` CHANGE `comment_author_url` `comment_author_url` VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_comments` CHANGE `comment_author_IP` `comment_author_IP` VARBINARY(100);
ALTER TABLE `wp_comments` CHANGE `comment_author_IP` `comment_author_IP` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_comments` CHANGE `comment_content` `comment_content` BLOB;
ALTER TABLE `wp_comments` CHANGE `comment_content` `comment_content` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_comments` CHANGE `comment_approved` `comment_approved` VARBINARY(20);
ALTER TABLE `wp_comments` CHANGE `comment_approved` `comment_approved` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_comments` CHANGE `comment_agent` `comment_agent` VARBINARY(255);
ALTER TABLE `wp_comments` CHANGE `comment_agent` `comment_agent` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_comments` CHANGE `comment_type` `comment_type` VARBINARY(20);
ALTER TABLE `wp_comments` CHANGE `comment_type` `comment_type` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;

ALTER TABLE `wp_commentmeta` CHANGE `meta_key` `meta_key` VARBINARY(255);
ALTER TABLE `wp_commentmeta` CHANGE `meta_key` `meta_key` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_commentmeta` CHANGE `meta_value` `meta_value` LONGBLOB;
ALTER TABLE `wp_commentmeta` CHANGE `meta_value` `meta_value` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;

ALTER TABLE `wp_links` CHANGE `link_url` `link_url` VARBINARY(255);
ALTER TABLE `wp_links` CHANGE `link_url` `link_url` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_links` CHANGE `link_name` `link_name` VARBINARY(255);
ALTER TABLE `wp_links` CHANGE `link_name` `link_name` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_links` CHANGE `link_image` `link_image` VARBINARY(255);
ALTER TABLE `wp_links` CHANGE `link_image` `link_image` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_links` CHANGE `link_target` `link_target` VARBINARY(25);
ALTER TABLE `wp_links` CHANGE `link_target` `link_target` VARCHAR(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_links` CHANGE `link_description` `link_description` VARBINARY(255);
ALTER TABLE `wp_links` CHANGE `link_description` `link_description` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_links` CHANGE `link_visible` `link_visible` VARBINARY(20);
ALTER TABLE `wp_links` CHANGE `link_visible` `link_visible` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_links` CHANGE `link_rel` `link_rel` VARBINARY(255) ;
ALTER TABLE `wp_links` CHANGE `link_rel` `link_rel` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_links` CHANGE `link_notes` `link_notes` MEDIUMBLOB;
ALTER TABLE `wp_links` CHANGE `link_notes` `link_notes` MEDIUMTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_links` CHANGE `link_rss` `link_rss` VARBINARY(255);
ALTER TABLE `wp_links` CHANGE `link_rss` `link_rss` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;

ALTER TABLE `wp_options` CHANGE `option_name` `option_name` VARBINARY(191);
ALTER TABLE `wp_options` CHANGE `option_name` `option_name` VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_options` CHANGE `option_value` `option_value` LONGBLOB;
ALTER TABLE `wp_options` CHANGE `option_value` `option_value` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_options` CHANGE `autoload` `autoload` VARBINARY(20);
ALTER TABLE `wp_options` CHANGE `autoload` `autoload` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;

ALTER TABLE `wp_orgseriesicons` CHANGE `icon` `icon` VARBINARY(100);
ALTER TABLE `wp_orgseriesicons` CHANGE `icon` `icon` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;

ALTER TABLE `wp_postmeta` CHANGE `meta_key` `meta_key` VARBINARY(255);
ALTER TABLE `wp_postmeta` CHANGE `meta_key` `meta_key` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_postmeta` CHANGE `meta_value` `meta_value` LONGBLOB;
ALTER TABLE `wp_postmeta` CHANGE `meta_value` `meta_value` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;

ALTER TABLE `wp_post_views` CHANGE `period` `period` VARBINARY(8);
ALTER TABLE `wp_post_views` CHANGE `period` `period` VARCHAR(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;

ALTER TABLE `wp_smush_dir_images` CHANGE `path` `path` BLOB;
ALTER TABLE `wp_smush_dir_images` CHANGE `path` `path` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_smush_dir_images` CHANGE `resize` `resize` VARBINARY(55);
ALTER TABLE `wp_smush_dir_images` CHANGE `resize` `resize` VARCHAR(55) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_smush_dir_images` CHANGE `lossy` `lossy` VARBINARY(55);
ALTER TABLE `wp_smush_dir_images` CHANGE `lossy` `lossy` VARCHAR(55) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_smush_dir_images` CHANGE `error` `error` VARBINARY(55);
ALTER TABLE `wp_smush_dir_images` CHANGE `error` `error` VARCHAR(55) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_smush_dir_images` CHANGE `meta` `meta` BLOB;
ALTER TABLE `wp_smush_dir_images` CHANGE `meta` `meta` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_smush_dir_images` CHANGE `path_hash` `path_hash` BINARY(32);
ALTER TABLE `wp_smush_dir_images` CHANGE `path_hash` `path_hash` CHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;

ALTER TABLE `wp_termmeta` CHANGE `meta_key` `meta_key` VARBINARY(255);
ALTER TABLE `wp_termmeta` CHANGE `meta_key` `meta_key` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_termmeta` CHANGE `meta_value` `meta_value` LONGBLOB;
ALTER TABLE `wp_termmeta` CHANGE `meta_value` `meta_value` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;

ALTER TABLE `wp_terms` CHANGE `name` `name` VARBINARY(200);
ALTER TABLE `wp_terms` CHANGE `name` `name` VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_terms` CHANGE `slug` `slug` VARBINARY(200);
ALTER TABLE `wp_terms` CHANGE `slug` `slug` VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;

ALTER TABLE `wp_term_taxonomy` CHANGE `taxonomy` `taxonomy` VARBINARY(32);
ALTER TABLE `wp_term_taxonomy` CHANGE `taxonomy` `taxonomy` VARCHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_term_taxonomy` CHANGE `description` `description` LONGBLOB;
ALTER TABLE `wp_term_taxonomy` CHANGE `description` `description` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;

ALTER TABLE `wp_usermeta` CHANGE `meta_key` `meta_key` VARBINARY(255);
ALTER TABLE `wp_usermeta` CHANGE `meta_key` `meta_key` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_usermeta` CHANGE `meta_value` `meta_value` LONGBLOB;
ALTER TABLE `wp_usermeta` CHANGE `meta_value` `meta_value` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;

ALTER TABLE `wp_users` CHANGE `user_login` `user_login` VARBINARY(60);
ALTER TABLE `wp_users` CHANGE `user_login` `user_login` VARCHAR(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_users` CHANGE `user_pass` `user_pass` VARBINARY(255);
ALTER TABLE `wp_users` CHANGE `user_pass` `user_pass` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_users` CHANGE `user_nicename` `user_nicename` VARBINARY(50);
ALTER TABLE `wp_users` CHANGE `user_nicename` `user_nicename` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_users` CHANGE `user_email` `user_email` VARBINARY(100);
ALTER TABLE `wp_users` CHANGE `user_email` `user_email` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_users` CHANGE `user_url` `user_url` VARBINARY(100);
ALTER TABLE `wp_users` CHANGE `user_url` `user_url` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_users` CHANGE `user_activation_key` `user_activation_key` VARBINARY(255);
ALTER TABLE `wp_users` CHANGE `user_activation_key` `user_activation_key` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_users` CHANGE `display_name` `display_name` VARBINARY(250);
ALTER TABLE `wp_users` CHANGE `display_name` `display_name` VARCHAR(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;

ALTER TABLE `wp_yoast_seo_links` CHANGE `url` `url` VARBINARY(255);
ALTER TABLE `wp_yoast_seo_links` CHANGE `url` `url` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `wp_yoast_seo_links` CHANGE `type` `type` VARBINARY(8);
ALTER TABLE `wp_yoast_seo_links` CHANGE `type` `type` VARCHAR(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;

ALTER TABLE `wp_posts` DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE `wp_comments` DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE `wp_commentmeta` DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE `wp_links` DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE `wp_options` DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE `wp_orgseriesicons` DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE `wp_postmeta` DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE `wp_post_views` DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE `wp_smush_dir_images` DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE `wp_termmeta` DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE `wp_terms` DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE `wp_term_relationships` DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;  
ALTER TABLE `wp_term_taxonomy` DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE `wp_usermeta` DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE `wp_users` DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE `wp_yoast_seo_links` DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE `wp_yoast_seo_meta` DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;

ALTER DATABASE `wordpress` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

Selon votre site, il se peut que vous ayez d’autres tables à mettre à jour.

Mise à jour du site live

Différents choix sont possibles selon que l’on décide de migrer la db ou PHP en premier.
J’ai choisi de mettre à jour la base de données en premier et ceci en tournant le script. J’aurais pû choisir de recharger ma base de données locale.
Pour ensuite procéder à la migration vers PHP7.
La combinaison DB mise à jour et PHP5 affichaient également des caractères bizarres.
Ceux-ci ont disparus après la migration vers PHP7.

Et voilà finalement, mon site tourne avec la version 7.3 de PHP, ça n’a pas été de tout repos mais on y est arrivé 😉
Et probablement que la mise à jour de la Db est un mal pour un bien.
Pour ce qui est du gain de performances annoncés avec la migration vers PHP7, je vous laisse juger…

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.