Différences entre versions de « Support unicode complet pour MySQL »

De MoodleDocs
(Création de la page)
 
(Prise en charge de l'affichage du code)
 
(19 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
{{Environnement}}
 
 
==UTF-8==
 
==UTF-8==
  
UTF-8 is a character encoding that most websites use. It encodes each of the 1,112,064 valid code points. To store all of this information, four bytes is required. The most popular values are in the three byte region. MySQL by default only uses a three byte encoding and so values in the four byte range can not be stored. Any record that contains a four byte character will not be saved.
+
UTF-8 est un encodage de caractères utilisé par la plupart des sites web. Il encode chacun des 1'112'064 points de codes valides. Pour stocker toute cette information, quatre octets au maximum sont requis. Les caractères les plus courants utilisent trois octets. MySQL utilise donc par défaut un encodage uniquement sur trois octets, et les valeurs nécessitant quatre octets (tels que les caractères asiatiques et les emoji) ne peuvent donc pas être stockées. Toute tentative d'enregistrement d'un texte contenant un caractère codé sur quatre octets génèrera une erreur de base de données de Moodle (et le contenu ne sera pas enregistré).
  
MySQL does support full UTF-8 support. It requires certain settings to be configured. From Moodle 3.3 the default will be to use full UTF-8 for MySQL and MariaDB. Existing databases will still run with partial support, but it is recommended to move over to full support.
+
MySQL et MariaDB offrent le support unicode (UTF-8) complet, '''mais cela nécessite de configurer certains réglages de la base de données'''. Depuis la version 3.3, Moodle assure le support UTF-8 complet pour MySQL et MariaDB par défaut. Les bases de données existantes fonctionneront toujours avec le support partiel, mais il est recommandé de passer au support complet.
  
Moodle comes with a Command Line Interface (CLI) script for converting to full UTF-8 for MySQL (and MariaDB). Before Moodle 3.3 this conversion tool would only change the collation to some variant of 'utf8_bin'. 'utf8_unicode_ci' was the recommended collation. We now recommend 'utf8mb4_unicode_ci'. 'utf8mb4_unicode_ci' supports 4 byte characters (utf8_unicode_ci only supports 3 byte characters) so four byte characters such as Asian characters and emoji should now be fully supported.
+
Moodle intègre un script en ligne de commande (CLI) pour convertir vers l'UTF-8 complet pour MySQL (et MariaDB). Avant les versions 3.1.5 et 3.2.2 de Moodle, cet outil de conversion modifiait uniquement l'interclassement pour certaines variantes de 'utf8_bin'. 'utf8_unicode_ci' était l'interclassement recommandé. L'interclassement recommandé est maintenant 'utf8mb4_unicode_ci', qui supporte les caractères sur quatre octets, tels que les caractères asiatiques et les emoji (utf8_unicode_ci supporte uniquement les caractères sur trois octets).
  
This script will attempt to change the database collation, character set, and default table settings.
+
Ce script tente de modifier l'interclassement de la base de données, l'encodage des caractères, les réglages par défaut des tables et les définitions de colonnes.
  
 
En résumé :
 
En résumé :
 
+
* les nouvelles installations de [[Notes de mise à jour de Moodle 3.1.5|Moodle 3.1.5]] et [[Notes de mise à jour de Moodle 3.2.2|3.2.2]] et ultérieures utiliseront utf8mb4 par défaut, '''si''' le serveur de base de données est configuré correctement pour cela (voir plus bas) ;
* Les installations neuves de Moodle 3.1.5 et 3.2.2 et ultérieures utiliseront utf8mb4 par défaut.
+
* les sites mis à jour vers Moodle 3.1.5 ou 3.2.2 '''peuvent''' utiliser le script pour mettre à jour vers utf8mb4 ;
* Les sites mis à jour vers Moodle 3.1.5 ou 3.2.2 peuvent utiliser le script pour mettre à jour vers utf8mb4.
+
* dans [[Notes de mise à jour de Moodle 3.3|Moodle 3.3]], si la base de données n'est pas configurée pour le support UTF-8 complet, un avertissement sera affiché et encouragera à passer à 'utf8mb4_unicode_ci', mais vous pourrez continuer à utiliser 'utf8_*' comme avant.
* Dans Moodle 3.3, si la base de données n'est pas configurée pour le support UTF-8 complet, un avertissement sera affiché et encouragera à passer à utf8mb4, mais vous pourrez continuer à utiliser utf8 comme avant.
+
* il est ''probable'' que dans une version future, le support complet de l'UTF-8 soit obligatoire.
  
 
=== Format de fichier ===
 
=== Format de fichier ===
  
To allow for large indexes on columns that are a varchar, a combination of settings needs to be set. The file format for the system needs to be using "Barracuda". This allows for the row format to be set to "Compressed" or "Dynamic". To enable this setting see the upgrade steps listed below.
+
Pour autoriser les grands index sur les colonnes de type varchar, une combinaison de réglages est nécessaire. Le format de fichier du système doit utiliser "Barracuda". Cela permet au format de ligne d'être défini à "Compressé" ou "Dynamique". Pour activer ce réglage, voyez les ''Étapes de mise à jour'' ci-dessous.
  
 
=== Fichier par table ===
 
=== Fichier par table ===
  
To enable this setting see the upgrade steps listed below.
+
Pour activer ce réglage, voyez les ''Étapes de mise à jour'' ci-dessous.
  
===Large prefix===
+
=== Grand préfixe ===
  
This in conjunction with the row format being either "Compressed" or "Dynamic" allows for large varchar indexes above 191 characters.
+
Ceci en conjonction avec le format de ligne défini à "Compressé" ou "Dynamique" permet de grands index pour les varchar au delà de 191 caractères.
To enable this setting see the upgrade steps listed below.
+
Pour activer ce réglage, voyez les ''Étapes de mise à jour'' ci-dessous.
  
 
== Étapes de mise à jour ==
 
== Étapes de mise à jour ==
Ligne 33 : Ligne 32 :
 
'''Important''' : effectuez une sauvegarde complète (de votre base de données) avant d'effectuer des changements ou de lancer le script !
 
'''Important''' : effectuez une sauvegarde complète (de votre base de données) avant d'effectuer des changements ou de lancer le script !
  
* Change configuration settings for MySQL (exactly the same for MariaDB). This step is optional. You can run the script and it will try and make these changes itself. If errors occur then try manually changing these settings as listed below.
+
* Modifiez les réglages de configuration pour MySQL (idem pour MariaDB). Cette étape est optionnelle. Vous pouvez lancer le script et il essayera de faire toutes les modifications par lui-même. si des erreurs se produisent, essayez de modifier manuellement ces réglages comme indiqué ci-dessous.
** On Linux based systems you will want to alter my.cnf. This may be located in '/etc/mysql/'.
+
** Sur les systèmes basés sur Linux vous devrez modifier le fichier my.cnf. Il est situé dans '/etc/mysql/'.
** Make the following alterations to my.cnf:
+
** Faites les modifications suivantes au fichier my.cnf :
<code>
+
 
 +
Attention : les options de configuration InnoDB suivantes sont dépréciées dans MySQL 5.7.7 et sont maintenant supprimées :
 +
 
 +
innodb_file_format, innodb_file_format_check, innodb_file_format_max, innodb_large_prefix
 +
 
 +
<syntaxhighlight lang="ini">
 
[client]
 
[client]
 
default-character-set = utf8mb4
 
default-character-set = utf8mb4
Ligne 51 : Ligne 55 :
 
[mysql]
 
[mysql]
 
default-character-set = utf8mb4
 
default-character-set = utf8mb4
</code>
+
</syntaxhighlight>
  
 
* Redémarrez votre serveur MySQL
 
* Redémarrez votre serveur MySQL
* Lancez le script en ligne de commande pour convertir au nouveau codage de caractère et interclassement (nécessite Moodle 3.1.5, 3.2.2 ou plus récent) : '''php admin/cli/mysql_collation.php --collation=utf8mb4_unicode_ci'''
+
* Lancez le script en ligne de commande pour convertir au nouvel encodage de caractères et d'interclassement (nécessite Moodle 3.1.5, 3.2.2 ou plus récent) :
 +
 
 +
<pre>
 +
$ php admin/cli/mysql_collation.php --collation=utf8mb4_unicode_ci
 +
</pre>
 +
 
 +
* Optionnel : assurez-vous de réparer et optimiser toutes vos bases de données et tables
 +
<pre>
 +
mysqlcheck -u root -p --auto-repair --optimize --all-databases
 +
</pre>
 +
 
 +
'''ATTENTION : pour les gros sites, le script sera long. Pour des très gros sites, cela peut prendre des heures (voire des jours) ! Il est donc recommandé de vérifier la durée sur une copie de votre site, avant de bloquer votre site en exploitation. Éventuellement, une solution plus rapide sera d'exporter le contenu de la base de données, puis de le ré-importer (après avoir modifié le codage et l'interclassement par défaut). Voyez les discussions en partie "Voir aussi" pour cela.'''
 +
 
 +
* Ajustez le tableau de paramètres $CFG->dboptions dans votre fichier '''config.php''' pour vous assurer que Moodle utilise le bon interclassement pour se connecter au serveur MySQL :
 +
<pre>
 +
$CFG->dboptions = array(
 +
  &hellip;
 +
  'dbcollation' => 'utf8mb4_unicode_ci',
 +
  &hellip;
 +
);
 +
</pre>
 +
 
 +
 
 +
Si vous n'avez pas accès au fichier de configuration du serveur de la base de données, mais avez seulement un accès en ligne de commande (ou via un outil tel quel phpMyAdmin ou Adminer), vous pouvez essayer les commandes SQL suivantes :
 +
<syntaxhighlight lang="sql">
 +
SET GLOBAL innodb_file_format = barracuda;
 +
SET GLOBAL innodb_file_per_table = 1;
 +
SET GLOBAL innodb_large_prefix = 'on';
 +
</syntaxhighlight>
 +
 
 +
* Essayez d'ajouter des Emojis 🇦🇺👏🎓 dans votre site Moodle pour vérifier que la mise à jour est correcte.
  
La mise à jour est maintenant terminée.
+
== Voir aussi ==
 +
* Cette [https://moodle.org/mod/forum/discuss.php?d=349319 discussion à propos de l'interclassement utf8mb4_unicode_ci] et la façon de le modifier (pour les tables).
 +
* Cette [https://moodle.org/mod/forum/discuss.php?d=353542 discussion sur la modification de l'interclassement via export de base de données] (pour les tables et colonnes).
  
[[Catégorie:Environnement|UTF-8]]
+
[[Catégorie:Environnement]]
 
[[Catégorie:UTF-8]]
 
[[Catégorie:UTF-8]]
 
[[Catégorie:Installation]]
 
[[Catégorie:Installation]]

Version actuelle datée du 24 juillet 2021 à 08:25

UTF-8

UTF-8 est un encodage de caractères utilisé par la plupart des sites web. Il encode chacun des 1'112'064 points de codes valides. Pour stocker toute cette information, quatre octets au maximum sont requis. Les caractères les plus courants utilisent trois octets. MySQL utilise donc par défaut un encodage uniquement sur trois octets, et les valeurs nécessitant quatre octets (tels que les caractères asiatiques et les emoji) ne peuvent donc pas être stockées. Toute tentative d'enregistrement d'un texte contenant un caractère codé sur quatre octets génèrera une erreur de base de données de Moodle (et le contenu ne sera pas enregistré).

MySQL et MariaDB offrent le support unicode (UTF-8) complet, mais cela nécessite de configurer certains réglages de la base de données. Depuis la version 3.3, Moodle assure le support UTF-8 complet pour MySQL et MariaDB par défaut. Les bases de données existantes fonctionneront toujours avec le support partiel, mais il est recommandé de passer au support complet.

Moodle intègre un script en ligne de commande (CLI) pour convertir vers l'UTF-8 complet pour MySQL (et MariaDB). Avant les versions 3.1.5 et 3.2.2 de Moodle, cet outil de conversion modifiait uniquement l'interclassement pour certaines variantes de 'utf8_bin'. 'utf8_unicode_ci' était l'interclassement recommandé. L'interclassement recommandé est maintenant 'utf8mb4_unicode_ci', qui supporte les caractères sur quatre octets, tels que les caractères asiatiques et les emoji (utf8_unicode_ci supporte uniquement les caractères sur trois octets).

Ce script tente de modifier l'interclassement de la base de données, l'encodage des caractères, les réglages par défaut des tables et les définitions de colonnes.

En résumé :

  • les nouvelles installations de Moodle 3.1.5 et 3.2.2 et ultérieures utiliseront utf8mb4 par défaut, si le serveur de base de données est configuré correctement pour cela (voir plus bas) ;
  • les sites mis à jour vers Moodle 3.1.5 ou 3.2.2 peuvent utiliser le script pour mettre à jour vers utf8mb4 ;
  • dans Moodle 3.3, si la base de données n'est pas configurée pour le support UTF-8 complet, un avertissement sera affiché et encouragera à passer à 'utf8mb4_unicode_ci', mais vous pourrez continuer à utiliser 'utf8_*' comme avant.
  • il est probable que dans une version future, le support complet de l'UTF-8 soit obligatoire.

Format de fichier

Pour autoriser les grands index sur les colonnes de type varchar, une combinaison de réglages est nécessaire. Le format de fichier du système doit utiliser "Barracuda". Cela permet au format de ligne d'être défini à "Compressé" ou "Dynamique". Pour activer ce réglage, voyez les Étapes de mise à jour ci-dessous.

Fichier par table

Pour activer ce réglage, voyez les Étapes de mise à jour ci-dessous.

Grand préfixe

Ceci en conjonction avec le format de ligne défini à "Compressé" ou "Dynamique" permet de grands index pour les varchar au delà de 191 caractères. Pour activer ce réglage, voyez les Étapes de mise à jour ci-dessous.

Étapes de mise à jour

Important : effectuez une sauvegarde complète (de votre base de données) avant d'effectuer des changements ou de lancer le script !

  • Modifiez les réglages de configuration pour MySQL (idem pour MariaDB). Cette étape est optionnelle. Vous pouvez lancer le script et il essayera de faire toutes les modifications par lui-même. si des erreurs se produisent, essayez de modifier manuellement ces réglages comme indiqué ci-dessous.
    • Sur les systèmes basés sur Linux vous devrez modifier le fichier my.cnf. Il est situé dans '/etc/mysql/'.
    • Faites les modifications suivantes au fichier my.cnf :

Attention : les options de configuration InnoDB suivantes sont dépréciées dans MySQL 5.7.7 et sont maintenant supprimées :

innodb_file_format, innodb_file_format_check, innodb_file_format_max, innodb_large_prefix

[client]
default-character-set = utf8mb4

[mysqld]
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix

character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

[mysql]
default-character-set = utf8mb4
  • Redémarrez votre serveur MySQL
  • Lancez le script en ligne de commande pour convertir au nouvel encodage de caractères et d'interclassement (nécessite Moodle 3.1.5, 3.2.2 ou plus récent) :
$ php admin/cli/mysql_collation.php --collation=utf8mb4_unicode_ci
  • Optionnel : assurez-vous de réparer et optimiser toutes vos bases de données et tables
mysqlcheck -u root -p --auto-repair --optimize --all-databases

ATTENTION : pour les gros sites, le script sera long. Pour des très gros sites, cela peut prendre des heures (voire des jours) ! Il est donc recommandé de vérifier la durée sur une copie de votre site, avant de bloquer votre site en exploitation. Éventuellement, une solution plus rapide sera d'exporter le contenu de la base de données, puis de le ré-importer (après avoir modifié le codage et l'interclassement par défaut). Voyez les discussions en partie "Voir aussi" pour cela.

  • Ajustez le tableau de paramètres $CFG->dboptions dans votre fichier config.php pour vous assurer que Moodle utilise le bon interclassement pour se connecter au serveur MySQL :
$CFG->dboptions = array(
  …
  'dbcollation' => 'utf8mb4_unicode_ci',
  …
);


Si vous n'avez pas accès au fichier de configuration du serveur de la base de données, mais avez seulement un accès en ligne de commande (ou via un outil tel quel phpMyAdmin ou Adminer), vous pouvez essayer les commandes SQL suivantes :

SET GLOBAL innodb_file_format = barracuda;
SET GLOBAL innodb_file_per_table = 1;
SET GLOBAL innodb_large_prefix = 'on';
  • Essayez d'ajouter des Emojis 🇦🇺👏🎓 dans votre site Moodle pour vérifier que la mise à jour est correcte.

Voir aussi