Errore di lettura DB

Errore di lettura DB

di Simon Star -
Numero di risposte: 26

Salve, innanzitutto saluto tutta la comunità.

Vi scrivo per un vostro gentile supporto.

Nel registrare manualmente un nuovo utente mi viene restituito il seguente errore:

"Si è verificato un errore durante la lettura del database".

Non riesco proprio a trovare una soluzione. Ho letto anche forum in inglese ma senza riuscire a rusolvere il problema.

Potreste cortesemente darmi dei suggerimenti?

Grazie in anticipo.

Simone

Media dei voti:  -
In riposta a Simon Star

Ri: Errore di lettura DB

di Simon Star -

Nel dettaglio moodle mi restituisce questo errore:

COLLATION 'utf8_bin' is not valid for CHARACTER SET 'utf8mb4'

In riposta a Simon Star

Ri: Errore di lettura DB

di Giovanni Marangelli -
Buona sera Simone,
ti suggerisco di dare un occhiata al seguente link: https://docs.moodle.org/37/en/MySQL_full_unicode_support nel quale viene indicata la procedura per effettuare l'aggiornamento del "character encoding" del server di database Mysql.
Cordiali Saluti
Giovanni
In riposta a Giovanni Marangelli

Ri: Errore di lettura DB

di Giovanni Albertini -

Buonasera,

ho da poco eseguito l'aggiornamento alla versione 3.8 ed ho riscontrato lo stesso problema di Simone, in particolare, quando inserisco l'indirizzo email nel profilo dell'utente restituisce l'errore: error/moodle/dmlreadexception (però non fornisce spiegazioni). Se modifico solo la password, l'aggiornamento viene fatto correttamente. Tra l'altro in Preferenze messaggi dell'utente restituisce l'errore: error/moodle/filenotfound. Quindi, se devo aggiornare il solo indirizzo email, sono costretto a cancellare l'utente e a reinserirlo tramite csv. Ho provato a rimettere le collation del DB a utf8_general_ci, che avevo modificato in utf8mb4_unicode_ci, come consigliato per l'aggiornamento alla 3.8 per la corretta visualizzazione delle icone, ma non ho risolto.

cosa si potrebbe tentare?

cordialmente 

Giovanni Albertini

In riposta a Giovanni Albertini

Ri: Errore di lettura DB

di Matteo Scaramuccia -

Ciao Giovanni,

per la corretta visualizzazione delle icone, ma non ho risolto.

Configurare utf8mb4_unicode_ci sul DB significa dare la possibilità di memorizzare molti più caratteri in diversi linguaggi perché l'originale UTF8 supportava codifiche fino a 3 byte escludendo di fatto molti caratteri, tipicamente quelli più evidenti sono le emoij come 😲.

Se ci descrivi meglio il tuo problema sulle icone in un nuovo thread possiamo provare ad aiutarti: potrebbe ad esempio essere un problema di configurazione del web server visto che gli Slash Arguments di Moodle sono ora abilitati di default.

HTH,
Matteo

In riposta a Matteo Scaramuccia

Ri: Errore di lettura DB

di Giovanni Albertini -

Ciao Matteo,  grazie. In realtà la modifica della collation l'avevo provata per risolvere il problema principale, cioè l'errore di lettura (error/moodle/dmlreadexception) nel tentativo di aggiornare il profilo utente, in particolar modo con l'inserimento-modifica dell'indirizzo email. Questo è successo dopo l'aggiornamento alla versione 3.8 di Moodle. Comunque anche provando a rimettere UTF8 non ho risolto il problema.

cordiali saluti

Giovanni

In riposta a Giovanni Albertini

Ri: Errore di lettura DB

di Simon Star -

Salve, grazie mille dei suggerimenti. 

Ho risolto come di seguito indicato. 

All'interno del file "/public_html/moodle2/config.php", alla voce 'dbcollation' è stata effettuata la seguente modifica:

'dbcollation' => 'utf8mb4_unicode_ci',

è stato sostituito il valore originale 'utf8_general_ci' con valore 'utf8mb4_unicode_ci'

Spero di essere stato di aiuto 
In riposta a Giovanni Albertini

Ri: Errore di lettura DB

di Matteo Scaramuccia -

Ciao Giovanni,

il problema principale, cioè l'errore di lettura (error/moodle/dmlreadexception) nel tentativo di aggiornare il profilo utente

per capire meglio la natura del problema puoi attivare la modalità di Debug di Moodle al livello DEVELOPER (il più alto) e condividere qui cosa ti appare a schermo nel (ri)provare l'aggiornamento: https://docs.moodle.org/38/en/Debugging#Enabling_debugging

HTH,
Matteo

In riposta a Matteo Scaramuccia

Ri: Errore di lettura DB

di Giovanni Albertini -

Ciao Matteo, ho fatto il debug, questo è il messaggio:

String [courseurl,core_hub] is deprecated. Either you should no longer be using that string, or the string has been incorrectly deprecated, in which case you should report this as a bug. Please refer to https://docs.moodle.org/dev/String_deprecation
  • line 394 of /lib/classes/string_manager_standard.php: call to debugging()
  • line 7292 of /lib/moodlelib.php: call to core_string_manager_standard->get_string()
  • line 55 of /mod/booking/settings.php: call to get_string()
  • line 89 of /lib/classes/plugininfo/mod.php: call to include()
  • line 47 of /admin/settings/plugins.php: call to core\plugininfo\mod->load_settings()
  • line 8385 of /lib/adminlib.php: call to require()
  • line 19 of /admin/settings.php: call to admin_get_root()

grazie

Giovanni


In riposta a Matteo Scaramuccia

Ri: Errore di lettura DB

di Giovanni Albertini -

Scusa Matteo,

il messaggio di debug che avevo inviato si riferiva ad un altro evento. Effettivamente da quello corretto si evince un problema di collation:

Informazioni di debug:  COLLATION 'utf8mb4_bin' is not valid for CHARACTER SET 'utf8'
SELECT 'x' FROM mdl_user WHERE LOWER(email) COLLATE utf8mb4_bin = LOWER(?) AND mnethostid = ? AND id <> ? LIMIT 0, 1
[array (
0 => 'cognome.nome@gmail.com',
1 => '1',
2 => 2193,
)]
Error code: dmlreadexception
×Stack trace: 
  • line 486 of /lib/dml/moodle_database.php: dml_read_exception thrown
  • line 1186 of /lib/dml/mysqli_native_moodle_database.php: call to moodle_database->query_end()
  • line 1918 of /lib/dml/moodle_database.php: call to mysqli_native_moodle_database->get_recordset_sql()
  • line 1903 of /lib/dml/moodle_database.php: call to moodle_database->record_exists_sql()
  • line 310 of /user/editadvanced_form.php: call to moodle_database->record_exists_select()
  • line 615 of /lib/formslib.php: call to user_editadvanced_form->validation()
  • line 551 of /lib/formslib.php: call to moodleform->validate_defined_fields()
  • line 661 of /lib/formslib.php: call to moodleform->is_validated()
  • line 171 of /user/editadvanced.php: call to moodleform->get_data()

Ho provato a sistemare in Opzioni tabella, ma evidentemente bisogna agire in altro modo.

grazie ancora, cordialmente

Giovanni

In riposta a Giovanni Albertini

Ri: Errore di lettura DB

di Giovanni Albertini -
Ho risolto sostituendo la collation solo nel campo email con utf8mb4_bin.
Adesso funziona!

grazie comunque
Giovanni
In riposta a Giovanni Albertini

Ri: Errore di lettura DB

di Barbara Barbara -

Buongiorno a tutti, io ho lo stesso preblema 

Errore di lettura DB

ho modificato config.php inserendo

'dbcollation' => 'utf8mb4_unicode_ci',

ma tutte le tabelle, come da immagine che posto hanno collation utf8_general_cicollation

come posso risolvere?


In riposta a Barbara Barbara

Ri: Errore di lettura DB

di Matteo Scaramuccia -

Ciao Barbara,

come posso risolvere?

leggi attentamente https://docs.moodle.org/38/en/MySQL_full_unicode_support.

HTH,
Matteo

In riposta a Matteo Scaramuccia

Ri: Errore di lettura DB

di Barbara Barbara -
Graie mille Matteo,
non ho accesso alla shell e non posso eseguire
$ php admin/cli/mysql_collation.php --collation=utf8mb4_unicode_ci
come posso aggirare il problema?
La collation deve essere modificata in tutte le tabelle?
help me
Grazie mille anticipatamente
In riposta a Matteo Scaramuccia

Ri: Errore di lettura DB

di Barbara Barbara -
Grazie mille Matteo,
non vorrei essere insistente, ma vorrei capire cme muovermi.
Non ho accesso alla shell e non posso eseguire
$ php admin/cli/mysql_collation.php --collation=utf8mb4_unicode_ci
come posso aggirare il problema?
La collation deve essere modificata in tutte le tabelle?
Cioè lo script $ php admin/cli/mysql_collation.php --collation=utf8mb4_unicode_ci altro non fa che modificare la collation a tutte le tabelle?
Potrei, per aggirare il problema, fare un export del database, modificare nello script di export la collation e fare import del database?
help me
Grazie mille anticipatamente
In riposta a Barbara Barbara

Ri: Errore di lettura DB

di Matteo Scaramuccia -

Ciao Barbara,

non vorrei essere insistente, ma vorrei capire cme muovermi.

nessun problema, spesso dimentico di rispondere ai post subito per impegni stringenti/urgenze e poi passo oltre dimenticandomene ammiccante.

Potrei, per aggirare il problema, fare un export del database, modificare nello script di export la collation e fare import del database?

Assolutamente si - attenzione alla modalità di (mysql)dump e sua configurazione: da phpMyAdmin prova e vedi cosa uscirà come dump - : solitamente, come già ho scritto anche "recentemente", è la via più semplice se provieni già da una collation utf8 (come il tuo caso) e se la tua versione di Database supporta utf8mb4: è sufficiente fare una sostituzione testuale - charset e collation - e poi re-importare il DB riconfigurando opportunamente anche il file config.php se li fosse ancora indicata la dbcollation precedente.

HTH,
Matteo

In riposta a Matteo Scaramuccia

Ri: Errore di lettura DB

di Barbara Barbara -
Come sempre grazie mille.
Ce l'ho fatta😉, ma senza i preziosi suggerimenti sarei ancora bloccata.
Ora mi permette d'inserire utenti e usare emoj.

Ho dovuto però fare anche questa modifica
ENGINE=InnoDB       è diventato ENGINE=InnoDB ROW_FORMAT=DYNAMIC/
Tutte le tabelle ora sono utf8mb4_unicode_ci

In riposta a Matteo Scaramuccia

Ri: Errore di lettura DB

di Denis Biliato -
Buongiorno Matteo, io ho spesso problema, ho seguito fiducioso di riuscire tutti i consigli riportati qui ma purtroppo non sono riuscito a risolvere il problema.
In sostanza con l'aggiornamento alla versione 3.8 di moodle e con l'aggiornamento a php 7.1 non riusciamo più ad iscrivere gli utenti.
Ho controllato il file config.php ed aveva già l'aggiornamento inserito di 'dbcollation' => 'utf8mb4_unicode_ci' sono andato a modificare nel database come suggerito da Barbara, però purtroppo continuo ad avere lo stesso errore -> Si è verificato un errore durante la lettura del database
Ho letto anche la guida che mai postato sopra ma senza esito.
Cosa mi consigli di provare?
Grazie mille per la disponibilità
In riposta a Denis Biliato

Ri: Errore di lettura DB

di Denis Biliato -

Buongiorno, nel frattempo ho trovato un rimedio, non risolutivo, ma pur sempre una alternativa.

Ho attivato la registrazione (OAuth2) tramite account Google e account FB riscontrando il corretto funzionamento. Per cui se qualche altro utente si trova nella mia stessa situazione può optare per questa.

Spero nel frattempo che qualcuno riesca ad aiutarmi per ripristinare la procedura di iscrizione manuale risolvendo il problema di lettura/scrittura del DB.

Grazie mille

In riposta a Denis Biliato

Ri: Errore di lettura DB

di Matteo Scaramuccia -

Ciao Denis,
strano errore, sarebbe meglio tu attivassi la modalità debug di Moodle a livello DEVELOPER, la più alta, per raccogliere lo stack trace ed eventualmente l'errore SQL dietro al tuo problema così da condividerlo anche qui e darci qualche informazioni in più.

HTH,
Matteo

In riposta a Matteo Scaramuccia

Ri: Errore di lettura DB

di Denis Biliato -
Ciao Matteo l'errore riportato è il seguente:

Informazioni di debug: COLLATION 'utf8mb4_bin' is not valid for CHARACTER SET 'utf8'
SELECT 'x' FROM mo_user WHERE LOWER(email) COLLATE utf8mb4_bin = LOWER(?) AND mnethostid = ? AND id <> ? LIMIT 0, 1
[array (
0 => 'email@*******.com',
1 => '1',
2 => -1,
)]
Error code: dmlreadexception
×Stack trace:
line 486 of /lib/dml/moodle_database.php: dml_read_exception thrown
line 1186 of /lib/dml/mysqli_native_moodle_database.php: call to moodle_database->query_end()
line 1918 of /lib/dml/moodle_database.php: call to mysqli_native_moodle_database->get_recordset_sql()
line 1903 of /lib/dml/moodle_database.php: call to moodle_database->record_exists_sql()
line 310 of /user/editadvanced_form.php: call to moodle_database->record_exists_select()
line 615 of /lib/formslib.php: call to user_editadvanced_form->validation()
line 551 of /lib/formslib.php: call to moodleform->validate_defined_fields()
line 661 of /lib/formslib.php: call to moodleform->is_validated()
line 171 of /user/editadvanced.php: call to moodleform->get_data()
In riposta a Denis Biliato

Ri: Errore di lettura DB

di Denis Biliato -
Ciao Matteo, ho risolto...
leggendo il debug sono andato a verificare all'interno della tabella user e lì ho trovato l'inghippo.

in sostanza avevo modificato il carattere in utf8mb4_unicode_ci nel DB però per qualche strano motivo nella tabella relativa agli utenti "user" il carattere era ancora in utf8_general_ci

Ho modifico la codifica manualmente ed ora funziona tutto.

Grazie mille per il supporto.
In riposta a Giovanni Albertini

Ri: Errore di lettura DB

di Patrick Donadio -
Buongiorno!
Grazie Giovanni Albertini.
La tua soluzione ha risolto il mio problema.
Da poco sono passato dalla 3.6 alle 3.9 e oggi ho notato che la creazione dei nuovi utenti e la richiesta recupero password andava in errore.
Oltra alla modifica del campo EMAIL ho anche editato il mio file CONFIG con la dbcollation suggerita.
In riposta a Giovanni Albertini

Ri: Errore di lettura DB

di Alberto Scattarelli -
Buongiorno, spero mi possiate aiutare, sono da poco a lavoro su Moodle ed ho avuto lo stesso problema riportato dagli amici qui sopra.
La versione di moodle a cui ho attualmente aggiornato è la 

Queste sono le informazioni di debug che mi ha restituito il sito: 4.1.9 Build 20240212 - Versione PHP 8.1.2 - DB mariadb (10.6.16)
Mi dareste per cortesia una dritta...non sono molto esperto. Garzie. sorridente

=======================================================
Informazioni di debug: 
 COLLATION 'utf8mb4_bin' is not valid for CHARACTER SET 'utf8mb3'
SELECT 'x' FROM mdlii_user WHERE LOWER(email) COLLATE utf8mb4_bin = LOWER(?) AND mnethostid = ? AND id <> ? LIMIT 0, 1
[array (
0 => 'moschini.lucia@libero.com',
1 => '1',
2 => 35,
)]
Error code: dmlreadexception

Stack trace: 
  • line 494 of /lib/dml/moodle_database.php: dml_read_exception thrown
  • line 293 of /lib/dml/moodle_read_slave_trait.php: call to moodle_database->query_end()
  • line 1221 of /lib/dml/mysqli_native_moodle_database.php: call to mysqli_native_moodle_database->query_end()
  • line 2010 of /lib/dml/moodle_database.php: call to mysqli_native_moodle_database->get_recordset_sql()
  • line 1995 of /lib/dml/moodle_database.php: call to moodle_database->record_exists_sql()
  • line 310 of /user/editadvanced_form.php: call to moodle_database->record_exists_select()
  • line 653 of /lib/formslib.php: call to user_editadvanced_form->validation()
  • line 589 of /lib/formslib.php: call to moodleform->validate_defined_fields()
  • line 699 of /lib/formslib.php: call to moodleform->is_validated()
  • line 176 of /user/editadvanced.php: call to moodleform->get_data()

=======================================================