La codifica che non ti aspetti
In passato, a dir la verità nemmeno troppo remoto, succedeva che i database delle applicazioni venivano creati con encoding SQL_ASCII e popolati con contenuti in formato ISO-8859-1. Tutto bene finchè non capita di dover migrare quei contenuti su un nuovo database, magari cambiando anche RDBMS passando da PostgreSQL a MySQL. Ovviamente il nuovo database ha encoding UTF-8. Succede che alcune cose vengono magicamente perse per strada: sì parliamo di accenti e cose varie.
La soluzione più semplice che ho trovato è la seguente:
1. Eseguire il dump del database codificato con SQL_ASCII
pg_dump database > database.sql
2. Conversione a UTF-8
iconv -f ISO8859-1 -t UTF-8 database.sql > database.utf8.sql
3. Importazione dei dati sul nuovo database (creato con encoding UTF-8)
psql database_utf8 < database.utf8.sql
Da qui poi è tutta discesa dato che utilizzando gli strumenti più conosciuti esportare i dati verso MySQL non ha riservato sorprese.





Commenti
Segnalo, per chi non riuscisse a convertire un db da MySQL latin1 a MySQL utf8 usando iconv, che ho provato con successo questa procedura, suggerita da wordpress.
Per ogni campo, scrivere le seguenti tre righe di sql:
alter table mia_tabella change mio_campo mio_campo VARCHAR(255) CHARACTER SET latin1
alter table mia_tabella change mio_campo mio_campo VARBINARY(255);
alter table mia_tabella change mio_campo mio_campo VARCHAR(255) CHARACTER SET utf8;
in caso di campo TEXT, cambiare VARBINARY con BLOB.
Un po’ più oneroso, ma efficace
Grazie per la preziosa segnalazione! Di sicuro a qualcuno tornerà utile