Errore di lettura DB

Ri: Errore di lettura DB

di Matteo Scaramuccia -
Numero di risposte: 16

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.