Breve vademecum all’uso dei charset UTF-8 con MySQL.
Nell’articolo pubblicato sabato scorso dal titolo “Possibili problemi con Latin1” manca un aspetto fondamentale da ricordare una volta convertito il proprio database MySQL e i files del proprio sito dal charset ISO-8859-1 a UTF-8.
MySQL tende infatti ad aprire una connessione con il proprio server utilizzando il charset latin1 (ISO-8859-1) fintanto che non lo si convince del contrario; questo potrebbe creare dei spiacevoli problemi durante la visualizzazione dei testi delle pagine, in particolar modo di quelli che presentano al loro interno caratteri speciali quali gli accenti; per evitare che ciò accada è consigliato ricordare a MySQL di utilizzare una connessione in UTF-8 richiamando la funzione mysql_set_charset(), nel caso utilizziate le vecchie librerie MySQL, oppure mysqli::set_charset() qualora si utilizzino le nuove librerie MySQLi
// Connessione al DB
$db = mysql_connect('localhost', 'myuser', 'mypassword') or
die('Problemi di connessione al database remoto');
mysql_set_charset('utf8', $db);
mysql_select_db('mydb');
// Esecuzione delle query
mysql_query('SELECT * FROM users WHERE 1', $db);
...
oppure
// Connessione al DB
$db = new MySQLi('localhost', 'myuser', 'mypassword', 'mydb') or
die('Problemi di connessione al database remoto');
$db->set_charset('utf8');
//Esecuzione della query
$rs = $db->query('SELECT * FROM users WHERE 1');
Così facendo si avranno alla sorgente i dati memorizzati in UTF-8 (nel DB), i files HTML e/o PHP codificati in UTF-8 e la connessione tra il client e il server MySQL avverrà anch’essa in UTF-8, garantendo la correttezza nella gestione e nella visualizzazione delle informazioni gestite.




