Grazie a tutti per le risposte,
la configurazione dei character_set del database è rimasta quella che ho postato inizialmente e nessuna query suggerita l'ha modificata, quindi resta sempre:
Originalmente inviato da
gestioneoltre
Codice:
character_set_client | utf8mb4
character_set_connection | utf8mb4
character_set_database | utf8
character_set_filesystem | binary
character_set_results | utf8mb4
character_set_server | latin1
character_set_system | utf8
character_sets_dir | /usr/share/mysql/charsets/
Ho fatto varie prove seguendo anche i vostri suggerimenti e ho ottenuto i seguenti risultati:
1) i dati inseriti dall'interfaccia phpMyAdmin sono codificati correttamente in utf8 e vengono visualizzati senza problemi da phpMyAdmin, quindi il problema sta nella comunicazione con il file php
2) inserendo nel costruttore PDO
Codice PHP:
$dbh = new PDO("mysql:host=localhost;dbname=$db;charset=utf8", $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET character_set_results = utf8'));
oppure
Codice PHP:
$dbh = new PDO("mysql:host=localhost;dbname=$db;charset=utf8", $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET CHARACTER SET utf8'));
oppure togliendo 'charset=utf8'
Codice PHP:
$dbh = new PDO("mysql:host=localhost;dbname=$db", $user, $pass));
non cambia nulla e i dati continuano a essere letti erroneamente
3) aggiungendo dopo il costruttore la query
Codice PHP:
$dbh->query('SET character_set_results = utf8;');
riesco a leggere i dati correttamente in utf8, ma se faccio un inserimento tramite php i dati vengono codificati male
4) aggiungendo dopo il costruttore la query
Codice PHP:
$dbh->query('SET CHARACTER SET utf8');
riesco a leggere i dati correttamente in utf8, e se faccio un inserimento tramite php i dati vengono codificati correttamente, quindi sembra funzionare tutto
Grazie mille delle risposte, a questo punto il problema sembrerebbe risolto con la soluzione 4, ma mi sorgono spontanee un paio di domande per capire per bene quale era il problema. Dalle prove che ho fatto mi sembra di capire che il problema dipende dalla non corretta comunicazione tra database e php, però perché eseguendo la query 'SET CHARACTER SET utf8' la comunicazione è corretta mentre 'charset=utf8' nel costruttore PDO (che dovrebbe essere fatto apposta) non funziona? E perché invece in locale mi funziona benissimo anche 'charset=utf8' quando le configurazioni dei due database sono identiche?