Należy wziąć pod uwagę 3 różne przypadki:
Wartości są rzeczywiście zakodowane przy użyciu Latin1
To jest spójny przypadek:zadeklarowany zestaw znaków i kodowanie treści są zgodne. To był jedyny przypadek, który omówiłem w mojej początkowej odpowiedzi.
Użyj sugerowanego polecenia:
ALTER TABLE tablename CONVERT TO CHARSET utf8 COLLATE utf8_bin
Zauważ, że CONVERT TO CHARACTER SET
Polecenie pojawiło się tylko w MySQL 4.1.2, więc każdy, kto używał bazy danych zainstalowanej przed 2005 rokiem, musiał użyć triku eksportu/importu. Dlatego w Internecie jest tak wiele starszych skryptów i dokumentów, które robią to po staremu.
Wartości są już zakodowane przy użyciu utf8
W takim przypadku nie chcesz, aby mysql konwertował jakiekolwiek dane, wystarczy zmienić metadane kolumny.
W tym celu musisz najpierw zmienić typ na BLOB, a następnie na TEXT utf8 dla każdej kolumny, aby nie było konwersji wartości:
ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8
Jest to zalecany sposób i jest wyraźnie udokumentowany w Alter Dokumentacja składni tabeli .
Wartości używane w innym kodowaniu
Domyślnym kodowaniem było Latin1 przez kilka lat w niektórych dystrybucjach Linuksa. W takim przypadku musisz użyć kombinacji dwóch technik:
- Napraw metadane tabeli, używając sztuczki typu BLOB
- Konwertuj wartości za pomocą
CONVERT TO
.