Varje kolumn (teckensträngstyp). har sin egen teckenuppsättning och sorteringsmetadata.
Om, när kolumnen s datatyp specificerades (dvs. när den senast skapades eller ändrades), ingen teckenuppsättning/sortering angavs uttryckligen, då skulle tabellens standardteckenuppsättning och sortering användas för kolumnen.
Om, när tabellen specificerades, ingen standardteckenuppsättning/sortering angavs uttryckligen, då skulle databasens standardteckenuppsättning och sortering användas för tabellens standard.
Kommandona som du citerar i din fråga ändrar bara sådana standardteckenuppsättningar/kollationer för databasen respektive tabellen. Med andra ord kommer de bara att påverka tabeller och kolumner som skapas därefter – de kommer inte påverka befintliga kolumner (eller data).
För att uppdatera befintliga data bör du först läsa Ändra teckenuppsättningen
avsnittet på manualsidan på ALTER TABLE
:
För att bara ändra standard teckenuppsättning för en tabell, använd denna sats:
ALTER TABLE tbl_name DEFAULT CHARACTER SET charset_name;
Ordet DEFAULT
är valfritt. Standardteckenuppsättningen är den teckenuppsättning som används om du inte anger teckenuppsättningen för kolumner som du lägger till i en tabell senare (till exempel med ALTER TABLE ... ADD column
).
När foreign_key_checks
systemvariabeln är aktiverad, vilket är standardinställningen, teckenuppsättningskonvertering är inte tillåten i tabeller som innehåller en teckensträngskolumn som används i en främmande nyckelrestriktion. Lösningen är att inaktivera foreign_key_checks
innan du utför teckenuppsättningskonverteringen. Du måste utföra konverteringen på båda tabellerna som är involverade i den främmande nyckelbegränsningen innan du återaktiverar foreign_key_checks
. Om du återaktiverar foreign_key_checks
efter att endast konverterat en av tabellerna, en ON DELETE CASCADE
eller ON UPDATE CASCADE
operation kan korrumpera data i referenstabellen på grund av implicit konvertering som sker under dessa operationer (fel #45290, fel #74816).