sql >> Database >  >> RDS >> Mysql

Is dit een veilige manier om MySQL-tabellen van latin1 naar utf-8 te converteren?

Er zijn 3 verschillende gevallen om te overwegen:

De waarden zijn inderdaad gecodeerd met Latin1

Dit is het consistente geval:gedeclareerde karakterset en inhoudcodering komen overeen. Dit was het enige geval dat ik in mijn eerste antwoord behandelde.

Gebruik de opdracht die je hebt voorgesteld:

ALTER TABLE tablename CONVERT TO CHARSET utf8 COLLATE utf8_bin

Merk op dat de CONVERT TO CHARACTER SET commando verscheen alleen in MySQL 4.1.2, dus iedereen die een database gebruikte die vóór 2005 was geïnstalleerd, moest een export/import-truc gebruiken. Dit is de reden waarom er zoveel oude scripts en documenten op internet zijn die het op de oude manier doen.

De waarden zijn al gecodeerd met utf8

In dit geval wilt u niet dat mysql gegevens converteert, u hoeft alleen de metagegevens van de kolom te wijzigen.

Hiervoor moet u het type eerst wijzigen in BLOB en vervolgens voor elke kolom in TEXT utf8, zodat er geen waardeconversies zijn:

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

Dit is de aanbevolen manier, en het is expliciet gedocumenteerd in Alter Documentatie over tabelsyntaxis .

De waarden worden in een andere codering gebruikt

De standaardcodering was enkele jaren Latin1 op een aantal Linux-distributies. In dit geval moet u een combinatie van de twee technieken gebruiken:

  • Repareer de metagegevens van de tabel met de truc van het BLOB-type
  • Converteer de waarden met CONVERT TO .


  1. Hoe de MySQL-databasegrootte voor uw database te krijgen?

  2. Nieuwe gegevens blijven niet behouden in de Rails-arraykolom op Postgres

  3. Is het mogelijk om afbeeldingen, geluiden en video's op te slaan in SQL Database?

  4. #1214 - Het gebruikte tabeltype ondersteunt geen FULLTEXT-indexen