Ci sono 3 diversi casi da considerare:
I valori sono infatti codificati utilizzando Latin1
Questo è il caso coerente:il set di caratteri dichiarato e la codifica del contenuto corrispondono. Questo è stato l'unico caso che ho trattato nella mia risposta iniziale.
Usa il comando che hai suggerito:
ALTER TABLE tablename CONVERT TO CHARSET utf8 COLLATE utf8_bin
Nota che il CONVERT TO CHARACTER SET
Il comando è apparso solo in MySQL 4.1.2, quindi chiunque utilizzasse un database installato prima del 2005 doveva utilizzare un trucco di esportazione/importazione. Questo è il motivo per cui ci sono così tanti script e documenti legacy su Internet che lo fanno alla vecchia maniera.
I valori sono già codificati utilizzando utf8
In questo caso, non vuoi che mysql converta alcun dato, devi solo cambiare i metadati della colonna.
Per questo, devi prima cambiare il tipo in BLOB, poi in TEXT utf8 per ogni colonna, in modo che non ci siano conversioni di valore:
ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8
Questo è il modo consigliato ed è esplicitamente documentato in Alter Documentazione sulla sintassi delle tabelle .
I valori utilizzati in una codifica diversa
La codifica predefinita è stata Latin1 per diversi anni su alcune distribuzioni Linux. In questo caso, devi usare una combinazione delle due tecniche:
- Correggi i metadati della tabella, usando il trucco del tipo BLOB
- Converti i valori usando
CONVERT TO
.