sql >> Database teknologi >  >> RDS >> Mysql

Er dette en sikker måde at konvertere MySQL-tabeller fra latin1 til utf-8?

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 .


  1. Betydning af firkantede parenteser [] i MS-SQL tabeldesigner?

  2. Sådan annoteres MYSQL autoincrement-felt med JPA-annoteringer

  3. Sådan ændres skabelonens databasesamlingskodning

  4. PHP - Enkelte anførselstegn eller dobbelte anførselstegn omkring SQL-forespørgsel?