Comment supprimer un index en texte intégral (fulltext) dans MySQL – passer de MyISAM à InnoDB

J’ai donc décidé de désinstaller YARPP (le « yet another related posts plugin » pour WordPress), et de convertir ma table wp_posts de MyISAM en InnoDB.

Bien sûr, quand j’ai fait la conversion MyISAM -> InnoDB, j’ai eu une erreur de myPhpAdmin :

The used table type doesn’t support FULLTEXT indexes

Pas inattendu… les versions de MySQL < 5.6.4 ne supportent pas FULLTEXT dans InnoDB, donc je savais que je devais laisser tomber les index FULLTEXT mais je ne savais pas trop comment. Et il a fallu un certain temps pour trouver la solution. Mais la voici :

1) Lancez la requête suivante pour obtenir une liste de vos tables :

 SHOW CREATE TABLE wp_posts

 

(si vous n’avez pas utilisé le préfixe de table par défaut de WordPress ou si vous ne faites pas cela pour WordPress, remplacez wp_posts par… la table avec laquelle vous avez un problème)

2) Il vous montrera une liste des tableaux. Vous cherchez quelque chose comme ça :

 

finding-fulltext

Vous pouvez voir la partie FULLTEXT – les noms des clés d’index sont yarpp_title et yarpp_content dans ce cas.

3) Maintenant pour déposer ces clés FULLTEXT, les requêtes suivantes :

ALTER TABLE wp_posts DROP INDEX yarpp_title;
ALTER TABLE wp_posts DROP INDEX yarpp_content;

Je les ai faites une à la fois. Évidemment, si vous n’êtes pas à 100% dans le même bateau que moi, remplacez wp_posts par le nom de votre table, et yarpp_title / yarpp_content par ce qui apparaît dans vos résultats.

4) Passionnant !

En supposant que vous vous soyez occupé de toutes les clés FULLTEXT, les éléments suivants devraient permettre de convertir la table en InnoDB dès maintenant :

ALTER TABLE wp_posts ENGINE=InnoDB;

 

(en supposant encore une fois que c’est la table wp_posts que vous convertissez – si ce n’est pas le cas, utilisez le nom de la table que vous convertissez)

…et, c’est fait !

3 Commentaires | Tapez un commentaire.

  1. splizzer sur novembre 5, 2016 - cliquez ici pour répondre
    Merci beaucoup, super tut !
    J'ai dû changer le type de stockage de ma base de données IP.board de MyISAM à InnoDB et cette méthode a fonctionné pour moi.
  2. Anonym sur janvier 11, 2017 - cliquez ici pour répondre
    Pourquoi ne pas utiliser MyISAM ? Lorsque vous utilisez la table `wp_posts` pour les publications, où sont des sélections fréquentes (plus de lecture que d'écriture), alors MyISAM est meilleure solution qu'InnoDB.
  3. Anonyme sur mars 8, 2020 - cliquez ici pour répondre
    j'ai fait ce qui précède, mais ma table a disparu... je ne sais pas où je me suis trompé

Tapez un commentaire.

Vous pouvez utiliser un pseudonyme et un faux courriel. Toutefois, si vous choisissez d'utiliser un vrai courrier électronique, les "gravatars" sont pris en charge. Lisez la politique de confidentialité pour plus de détails.