Bonjour,
J'avais ouvert précédemment une discussion sur la façon de modifier l'interclassement de MySQL (et MariaDB) via une interface web donnant accès aux tables de Moodle.
Sur le même principe, j'ai modifié mon script, afin de générer les lignes permettant de modifier l'interclassement des tables vers utf8mb4_unicode_ci (mais aussi utf8_unicode_ci si besoin).
Pré-requis à l'utilisation : pouvoir utiliser la ligne de commande MySQL, ou installer le plugin Moodle Adminer (qui permet l'accès à la base de données). Attention, le script ne fonctionnera pas avec PhpMyAdmin (celui-ci insérant une limite) !
Pour utiliser le script, il faut :
- accéder à Moodle Adminer, depuis "Administration du site > Serveur > Moodle Adminer"
- sélectionner la base de données
- cliquer sur "Requête SQL"
C'est à cet endroit que l'on va ensuite pouvoir exécuter les différentes requêtes.
Et voici le script en question (la première partie est auto-explicative, et pourrait être enlevée du script en lui-même) :
-- =============== Présentation ===============
-- Cette requête, spécifique à MySQL (et MariaDB) sert à modifier
-- l'interclassement des tables d'une base de données Moodle existante.
-- =============== Instructions à suivre ===============
-- 1 : adapter le nom de la base de données
-- 2 : SI utf8_unicode_ci est souhaité, commenter la ligne avec utf8mb4_unicode_ci
-- 3 : lancer la requête
-- 4 : lancer les requêtes générées en première colonne
-- 5 : relancer cette requête
-- 6 : lancer les requêtes générées en seconde colonne
-- =============== Définition des variables ===============
SET @BASE = 'moodle'; -- Le nom de la base de données (à adapter)
SET @COLLATION = 'utf8_unicode_ci'; -- Pour choisir utf8_unicode_ci, il faut
SET @COLLATION = 'utf8mb4_unicode_ci'; -- commenter CETTE ligne avec "-- " au début
SET @CHARSET = SUBSTRING_INDEX(@COLLATION, '_', 1);
-- Pour lancer la requête, il FAUT intégrer les différentes lignes SET ci-dessus
-- La requête en elle-même ne doit PAS être modifiée !
SELECT
CONCAT('ALTER TABLE ', @BASE, '.', table_name, ' CONVERT TO CHARACTER SET ', @CHARSET, ' COLLATE ', @COLLATION, ';')
AS 'Remplacement 1 : contenu'
,CONCAT('ALTER TABLE ', @BASE, '.', table_name, ' CHARACTER SET ', @CHARSET, ' COLLATE ', @COLLATION, ';')
AS 'Remplacement 2 : conteneur'
FROM information_schema.tables
WHERE table_schema = @BASE -- Le nom de la base à traiter
AND table_collation != @COLLATION -- Le nom de l'interclassement souhaité
GROUP BY table_name;
Comme le script intégré à Moodle, cette requête peut rester inopérante si vous n'avez pas les pré-requis et droits nécessaires au niveau de MySQL (ou MariaDB).
Voila, j'espère que les explications ainsi que cette requête seront utiles.
Séverin