dmlwriteexception lors de l'édition d'une fiche de l'activité base de données

dmlwriteexception lors de l'édition d'une fiche de l'activité base de données

par Gaël Mifsud,
Nombre de réponses : 8

Bonjour à tous,

Nous sommes passés à Moodle 3.1.1 pour la rentrée.
Le serveur tourne sous Apache et la BDD est en MySQL ; l'OS est une Debian Jessie.


Comme vous pouvez le voir dans la capture en fichier joint, un de nos étudiant a du mal à envoyer ses réponses sur une activité Base de Données.

De plus, lorsqu'il clique sur "Enregistrer et afficher", il se retrouve avec le message :

Erreur d'écriture dans la base de données.

Ce message renvoie sur la page dmlwriteexception de la doc Moodle.

Dans mes logs Apache j'ai des messages de ce type :

[Mon Sep 26 12:53:10.994575 2016] [proxy_fcgi:error]xxxx [pid :tid xxxxxxxxx] [client 172.x.x.x:60768] AH01071: Got error 'PHP message: Default exception handler: Erreur d'\xc3\xa9criture vers la base de donn\xc3\xa9es Debug: Incorrect string value: '\\xF0\\x9D\\x9C\\x8C =...' for column 'drafttext' at row 1\nUPDATE mdl_editor_atto_autosave SET elementid = ?,contextid = ?,pagehash = ?,userid = ?,drafttext = ?,draftid = ?,pageinstance = ?,timemodified = ? WHERE id=?\n[array (\n  0 => 'field_1558',\n  1 => '244878',\n  2 => 'f01a8b417a726d8ba44b338ea53f953b0dcd7d1d',\n  3 => '34593',\n  4 => '<p>Volume molaire : Vm=V/n (Vm : volume molaire), (V : Volume), (n : quantit\xc3\xa9 de mati\xc3\xa8re).</p><p>Masse volumique : \xf0\x9d\x9c\x8c =m/V ( \xf0\x9d\x9c\x8c: masse volumique), (m : masse) et (V: le volume)</p><p><br></p>',\n  5 => '308257123',\n  6 => 'yui_3_17_2_1_1474886294211_681',\n  7 => 1474887190,\n  8 => '37334',\n)]\nError code: dmlwriteexception\n* line 477 of /lib/dml/moodle_database.php: dml_write_exception thrown\n* line 1400 of /lib/dml/mysqli_native_moodle_database.php: call to moodle_database->query_end()\n* line 1432 of /lib/dml/mysqli_native_moodle_database.php: call to mysql...\n', referer: http://moodle.univ-lille1.fr/mod/data/edit.php?d=xxx


Il y a donc, à mon avis, deux problèmes distincts.

- d'une part l'étudiant qui "perd la connexion"
- d'autre part Moodle qui essaye d'enregistrer dans la BDD des données qui ne lui conviennent pas suite à cette perte de connexion


Pour le premier point, nous soupçonnons un Wifi qui perdrait et reprendrait la connexion souvent, mais nous ne pouvons en être sûrs et nous ne parvenons pas à reproduire le message d'erreur de notre côté.

Quand Moodle parle d'une connexion perdue dans les petits encarts jaunes, de quoi s'agit-il ? De la session utilisateur ?
Elle est réglée sur 4 heures chez nous, cela serait étonnant.


Pour le second point, il nous semble étonnant que Moodle tente d'écrire dans sa BDD des données erronées alors qu'il a été capable de détecter une problème en amont et de prévenir l'utilisateur !?

Avez-vous des idées ?

Annexe Erreur activité base de données - moodle 31 - Capture 2016-09-27.jpg
Moyenne des évaluations  -
En réponse à Gaël Mifsud

Re: dmlwriteexception lors de l'édition d'une fiche de l'activité base de données

par Nicolas Martignoni,
Avatar Développeurs Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Il semble que lorsque Moodle tente d'enregistrer le brouillon de l'éditeur, la première erreur survient ("Connexion au serveur impossible..."), car la chaîne comporte des caractères bizarres (voir l'erreur indiquée : "Debug: Incorrect string value"). Ensuite, normal qu'il n'arrive pas à enregistrer dans la BDD, puisque que la chaîne comporte toujours ces caractères bizarres.

Ce serait intéressant :

  • de voir si en n'utilisant que des caractères normaux, cet étudiant rencontre toujours le même problème,
  • puis de détecter les caractères qui posent problème.

En réponse à Nicolas Martignoni

Re: dmlwriteexception lors de l'édition d'une fiche de l'activité base de données

par Gaël Mifsud,

On a l'impression que l'étudiant utilise tout simplement les caractères scientifiques de l'éditeur Atto.
Nous allons faire des tests avec un mac et Safari pour voir si nous parvenons à reproduire le problème.

Mais à la lumière de ton commentaire, j'ai remarqué dans mon fichier de logs que le codage des caractères semble sur 8 octets.

Or notre BDD Moodle est en utf8_general_ci, et non en utf8mb4 ! mort

La bonne question maintenant est de savoir :
- pourquoi les autres étudiants n'ont pas rencontré le problème ?
- changer l'interclassement des tables dans Moodle résoudrait-il le problème ?
- et surtout (!) changer l'interclassement est-il possible sans casser Moodle ?

En réponse à Gaël Mifsud

Re: dmlwriteexception lors de l'édition d'une fiche de l'activité base de données

par Nicolas Martignoni,
Avatar Développeurs Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

> pourquoi les autres étudiants n'ont pas rencontré le problème ?

Chercher du côté de l'environnement personnel de l'étudiant (ordinateur, navigateur, etc.). A-t-il ajouté manuellement des caractères (voir le code source dans l'éditeur) ? Il pourrait aussi tester sur https://qa.moodle.net/ ou sur https://demo.moodle.net/ pour voir si c'est la même chose.

> changer l'interclassement des tables dans Moodle résoudrait-il le problème ?

AMHA non.

> et surtout (!) changer l'interclassement est-il possible sans casser Moodle ?

Jamais fait, mais je ne m'y risquerais qu'avec bcp de précautions (backup, restore sur un serveur de tests, tests, etc.)

Moyenne des évaluations Utile (1)
En réponse à Nicolas Martignoni

Re: dmlwriteexception lors de l'édition d'une fiche de l'activité base de données

par Daniel Méthot,
Avatar Moodleurs particulièrement utiles

Bonjour, ... en passant.

Gaël dit "notre BDD Moodle est en utf8_general_ci, et non en utf8mb4"

Il faut donc choisir ce nouveau mode à présent pour l'ensemble de la base Moodle ?

Daniel

En réponse à Daniel Méthot

Re: dmlwriteexception lors de l'édition d'une fiche de l'activité base de données

par Patrick Lemaire,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour Daniel,

Non ! La doc officielle parle toujours de "utf8_unicode_ci" (cf : https://docs.moodle.org/31/en/Installation_quick_guide#Create_a_database).

A bientôt,
Patrick

Moyenne des évaluations Utile (1)
En réponse à Patrick Lemaire

Re: dmlwriteexception lors de l'édition d'une fiche de l'activité base de données

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour,

Le temps a passé, et si des gens tombent sur cette discussion après quelques recherches, il est maintenant (depuis Moodle 3.1.5, 3.2.2 puis 3.3) recommandé, dans la mesure du possible, d'utiliser ce nouvel encodage et interclassement ('utf8mb4_unicode_ci'). Sinon, pas de gros souci à continuer à utiliser "utf8_unicode_ci", hormis pour le support des emojis.

Voir la documentation sur le support complet de l'UTF-8 pour plus de détails.

Séverin

Moyenne des évaluations Utile (1)
En réponse à Nicolas Martignoni

Re: dmlwriteexception lors de l'édition d'une fiche de l'activité base de données

par Gaël Mifsud,

Alors après enquête, il s'avère que l'étudiant n'utilise pas les caractères spéciaux de Atto, mais ceux de son système.

Précisément, il a saisi l'expression rho à l'aide du registre des caractères sous Mac OS X ( avec le raccourcis ctrl + cmd + espace ).

Je  suppose que cela a inséré un caractère utf8mb4 dans l'éditeur, ce qui provoque l'erreur d'écriture dans la BDD.

Seconde supposition, la perte de connexion proviendrait de la sauvegarde automatique qu'effectue ATTO, qui doit vraisemblablement provoquer la même erreur d'écriture en BDD.

Il serait effectivement intéressant de tester sur une des plate-formes que tu indiques Nicolas.


Merci à tous pour vos remarques. Si la doc Moodle dit de ne pas passer à utf8mb4 pour le moment alors inutile de précipiter les choses, d'autant que rien ne garantie que les modules externes, eux, seront adaptés.