Mettere a posto l’encoding di Mysql dopo una migrazione

Recentemente ho spostato questo blog su un nuovo provider; nel farlo ho trasferito i dati da una vecchissima installazione di Mysql 3.23 a un ragionevole Mysql 5.x. Purtroppo l’encoding del database si era rovinato; tutte le accentate apparivano come punti di domanda. Quello che era successo è che il vecchio Mysql usava l’encoding iso8859-1 (ovvero latin1), ma non lo dichiarava esplicitamente nel mysqldump. Caricandolo sul nuovo Mysql, senza dichiarare l’encoding, il testo è stato caricato assumendo utf-8. Quindi il database pensava di contenere testo codificato in utf-8, ma non era vero.

Per riparare la situazione, ho dovuto dare:

ALTER TABLE wp_posts MODIFY post_content blob;

che dichiara la colonna come dati binari; poi

ALTER TABLE wp_posts MODIFY post_content text charset latin1;

che la dichiara come testo con encoding latin1. Non potevo dare subito quest’ultimo comando, perché Mysql avrebbe allora cercato di trascodificare erroneamente. Infine ho dato l’encoding desiderato con il comando

ALTER TABLE wp_posts MODIFY post_content text charset utf8;

che la trasforma in utf-8.

Ebbene sì, questo post serve solo per ricordarmi di questi comandi se ne dovessi avere mai ancora bisogno. Altre risorse:

Per sapere il charset del database corrente si può usare

show variables like "character_set_database";
show variables like "collation_database";

oppure

SHOW CREATE DATABASE `DB_NAME`

Leave a Reply