Artikeln http://mysqldump.azundris.com/archives/60 -Handling-character-sets.html diskuterar detta ingående och visar också vad som kommer att hända.
Observera att du blandar ihop en TECKENSET (faktiskt en kodning) med en SAMMANSTÄLLNING.
En teckenuppsättning definierar den fysiska representationen av en sträng i byte på disken. Du kan göra detta synligt med hjälp av HEX()-funktionen, till exempel SELECT HEX(str) FROM t WHERE id = 1
för att se hur MySQL lagrar byten i din sträng. Vad MySQL levererar till dig kan vara olika, beroende på teckenuppsättningen i din anslutning, definierad med SET NAMES ....
.
En sammanställning är en sorteringsordning. Det beror på teckenuppsättningen. Till exempel kan din data finnas i teckenuppsättningen latin1, men den kan ordnas enligt någon av de två tyska sorteringsordningarna latin1_german1_ci eller latin1_german2_ci. Beroende på ditt val kommer Umlauts som ö antingen sorteras som oe eller som o.
När du ändrar en teckenuppsättning måste data i tabellen skrivas om. MySQL läser all data och alla index i tabellen, gör en dold kopia av tabellen som tillfälligt tar upp diskutrymme, flyttar sedan den gamla tabellen till en dold plats, flyttar den dolda tabellen på plats och släpper sedan den gamla data, vilket frigör upp diskutrymme. Under en tid däremellan behöver du två gånger så mycket lagring för det.
När du ändrar en sortering ändras sorteringsordningen för data men inte själva data. Om kolumnen du ändrar inte är en del av ett index, behöver inget göras förutom att skriva om frm-filen, och tillräckligt nya versioner av MySQL borde inte göra mer.
När du ändrar en sammanställning av en kolumn som ingår i ett index måste indexet skrivas om, eftersom ett index är ett sorterat utdrag ur en tabell. Detta kommer återigen att utlösa logiken för kopiering av ALTER TABLE-tabellen som beskrivs ovan.
MySQL försöker bevara data genom att göra detta:Så länge data du har kan representeras i målteckenuppsättningen, kommer konverteringen inte att gå med förlust. Varningar kommer att skrivas ut om det pågår trunkering av data och data som inte kan representeras i målteckenuppsättningen kommer att ersättas av ?