Assistance technique

Modifier l'interclassement de MySQL (ou MariaDB) pour utf8mb4_unicode_ci

 
C'est moi :-)
Modifier l'interclassement de MySQL (ou MariaDB) pour utf8mb4_unicode_ci
Groupe Moodleurs particulièrement utilesGroupe Traducteurs

Bonjour,

Certains risquent d'ouvrir des grands yeux, avec la découverte de cet interclassement pour MySQL (et MariaDB).

Son intérêt : combiné avec le jeu de caractères utf8mb4, il permet d'utiliser tout type de caractère, y compris les caractères asiatiques et les emojis sourire

Moodle en lui-même est compatible depuis de nombreuses versions, étant donné que le "blocage" était au niveau de MySQL.

Moodle 3.1.5 et 3.2.2 intègrent un script (en ligne de commande) permettant de modifier de façon automatique les paramètres de MySQL, pour passer à ce jeu de caractères et cet interclassement. A partir de ces versions, une installation neuve essayera d'utiliser ces paramètres. Vous en saurez plus depuis la documentation vers le support UTF-8 complet pour MySQL.

Attention : pour que cela puisse fonctionner, il faudra disposer d'un minimum de pré-requis et de droits, au niveau MySQL. Cela ne sera donc pas possible partout (chez tous les hébergeurs) !

Malgré tout, ne vous inquiétez pas : il n'y a aucun problème à continuer d'utiliser utf8_unicode_ci, hormis celui de ne pas permettre les caractères asiatiques et les emojis. Même Moodle 3.3 ne fera qu'afficher un avertissement et un encouragement à passer vers ce nouvel interclassement.

Séverin

 
Moyenne des évaluations  -
C'est moi :-)
Re: Modifier l'interclassement de MySQL (ou MariaDB) pour utf8mb4_unicode_ci - Requête SQL
Groupe Moodleurs particulièrement utilesGroupe Traducteurs

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 :

  1. accéder à Moodle Adminer, depuis "Administration du site > Serveur > Moodle Adminer"
  2. sélectionner la base de données
  3. 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

 
Moyenne des évaluations Utile (2)
Avatar Sébastien Mehr
Re: Modifier l'interclassement de MySQL (ou MariaDB) pour utf8mb4_unicode_ci - Requête SQL
Groupe Moodleurs particulièrement utiles

Hello Séverin,

Merci pour toutes ces précisions. J'avais effectivement repéré ce changement dans la note de version sans m'y être pencher dessus , tu vas me faire gagner du temps clin d’œil !


Seb

 
Moyenne des évaluations  -
C'est moi :-)
Re: Modifier l'interclassement de MySQL (ou MariaDB) pour utf8mb4_unicode_ci - Requête SQL
Groupe Moodleurs particulièrement utilesGroupe Traducteurs

Avec plaisir sourire

C'est "un peu" le principe et le but de la communauté : faire gagner du temps (aux autres), et en gagner soi-même, tout cela grâce au partage des connaissances et compétences.

Séverin

 
Moyenne des évaluations Utile (2)
Avatar Luiggi Sansonetti
Re: Modifier l'interclassement de MySQL (ou MariaDB) pour utf8mb4_unicode_ci - Requête SQL
Groupe Moodleurs particulièrement utilesGroupe Titulaires du Moodle Course Creator CertificateGroupe Traducteurs

clin d’œil

 
Moyenne des évaluations  -
Avatar Nicolas Martignoni
Re: Modifier l'interclassement de MySQL (ou MariaDB) pour utf8mb4_unicode_ci
Groupe DéveloppeursGroupe Moodleurs particulièrement utilesGroupe Traducteurs

Avant que quelqu'un ne pose la question : les versions de la MoodleBox depuis la 1.6.1 (4 mars 2017)  prennent en compte cette modification, sans nécessiter de modification.

 
Moyenne des évaluations Utile (2)
Daniel
Re: Modifier l'interclassement de MySQL (ou MariaDB) pour utf8mb4_unicode_ci
Groupe Moodleurs particulièrement utiles

Merci Nicolas,

OUF...grand sourire

 
Moyenne des évaluations  -