Problemi di codifica UTF-8 in MySQL

Sono “inciampato” in un problema abbastanza fastidioso con MySQL e PDO. In pratica, una istruzione INSERT contenente dei caratteri speciali (nel mio caso una e acuta) non veniva correttamente recepita. La stringa contenuta nella istruzione di inserimento era correttamente codificata in UTF-8, ma una volta scritta nel relativo campo del database risultava corrotta, come se fosse stata utilizzata una codifica diversa. A complicare le cose, nella stringa di connessione al DB utilizzata era specificato il charset corretto.
Soluzione:

$pdo = new PDO(
'mysql:host=mysql.example.com;dbname=example_db',
"username",
"password",
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

Come potete vedere, passiamo al costruttore dell’oggetto PDO un comando specifico per MySQL, che imposta il charset corretto, mentre in precedente costruttore definito come segue:

$pdo = new PDO('mysql:host=mysql.example.com;dbname=example_db;charset=utf8',"username","password");

nonostante fosse sintatticamente corretto non funzionava.
Maggiori dettagli a questa pagina.

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...