PHPBlog.it

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 ;-)

  • Daniel scrive:

    Grazie per la preziosa segnalazione! Di sicuro a qualcuno tornerà utile :)

  • Lascia un Commento

    *