sql >> Databasteknik >  >> RDS >> Mysql

Är detta ett säkert sätt att konvertera MySQL-tabeller från latin1 till utf-8?

Det finns tre olika fall att överväga:

Värdena är verkligen kodade med Latin1

Detta är det konsekventa fallet:deklarerad teckenuppsättning och innehållskodning matchar. Detta var det enda fallet jag tog upp i mitt första svar.

Använd kommandot du föreslog:

ALTER TABLE tablename CONVERT TO CHARSET utf8 COLLATE utf8_bin

Observera att CONVERT TO CHARACTER SET kommandot dök endast upp i MySQL 4.1.2, så alla som använde en databas installerad före 2005 var tvungna att använda ett export/import-trick. Det är därför det finns så många äldre skript och dokument på Internet som gör det på det gamla sättet.

Värdena är redan kodade med utf8

I det här fallet vill du inte att mysql ska konvertera data, du behöver bara ändra kolumnens metadata.

För detta måste du först ändra typen till BLOB, sedan till TEXT utf8 för varje kolumn, så att det inte finns några värdekonverteringar:

ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8

Detta är det rekommenderade sättet, och det är explicit dokumenterat i Alter Tabellsyntaxdokumentation .

Värdena används i en annan kodning

Standardkodningen var Latin1 i flera år på vissa Linux-distributioner. I det här fallet måste du använda en kombination av de två teknikerna:

  • Åtgärda tabellens metadata genom att använda tricket av typen BLOB
  • Konvertera värdena med CONVERT TO .


  1. Hur skapar man ett "dubbelsidigt" unikt index på två fält?

  2. Vad är en databasfråga?

  3. SCD typ 6

  4. Pythons MySqlDB uppdateras inte rad