Der er 3 forskellige tilfælde at overveje:
Værdierne er faktisk kodet ved hjælp af Latin1
Dette er det konsekvente tilfælde:erklæret tegnsæt og indholdskodning matcher. Dette var den eneste sag, jeg dækkede i mit første svar.
Brug den kommando, du foreslog:
ALTER TABLE tablename CONVERT TO CHARSET utf8 COLLATE utf8_bin
Bemærk, at CONVERT TO CHARACTER SET
kommandoen dukkede kun op i MySQL 4.1.2, så alle, der brugte en database installeret før 2005, skulle bruge et eksport/import-trick. Det er derfor, der er så mange ældre scripts og dokumenter på internettet, der gør det på den gamle måde.
Værdierne er allerede kodet med utf8
I dette tilfælde ønsker du ikke, at mysql skal konvertere nogen data, du behøver kun at ændre kolonnens metadata.
Til dette skal du først ændre typen til BLOB, derefter til TEXT utf8 for hver kolonne, så der ikke er nogen værdikonverteringer:
ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8
Dette er den anbefalede måde, og den er eksplicit dokumenteret i Alter Tabelsyntaksdokumentation .
Værdierne bruges i en anden kodning
Standardkodningen var Latin1 i flere år på nogle Linux-distributioner. I dette tilfælde skal du bruge en kombination af de to teknikker:
- Ret tabellens metadata ved hjælp af BLOB-type-tricket
- Konverter værdierne ved hjælp af
CONVERT TO
.