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

È un modo sicuro per convertire le tabelle MySQL da latin1 a utf-8?

Ci sono 3 diversi casi da considerare:

I valori sono infatti codificati utilizzando Latin1

Questo è il caso coerente:il set di caratteri dichiarato e la codifica del contenuto corrispondono. Questo è stato l'unico caso che ho trattato nella mia risposta iniziale.

Usa il comando che hai suggerito:

ALTER TABLE tablename CONVERT TO CHARSET utf8 COLLATE utf8_bin

Nota che il CONVERT TO CHARACTER SET Il comando è apparso solo in MySQL 4.1.2, quindi chiunque utilizzasse un database installato prima del 2005 doveva utilizzare un trucco di esportazione/importazione. Questo è il motivo per cui ci sono così tanti script e documenti legacy su Internet che lo fanno alla vecchia maniera.

I valori sono già codificati utilizzando utf8

In questo caso, non vuoi che mysql converta alcun dato, devi solo cambiare i metadati della colonna.

Per questo, devi prima cambiare il tipo in BLOB, poi in TEXT utf8 per ogni colonna, in modo che non ci siano conversioni di valore:

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

Questo è il modo consigliato ed è esplicitamente documentato in Alter Documentazione sulla sintassi delle tabelle .

I valori utilizzati in una codifica diversa

La codifica predefinita è stata Latin1 per diversi anni su alcune distribuzioni Linux. In questo caso, devi usare una combinazione delle due tecniche:

  • Correggi i metadati della tabella, usando il trucco del tipo BLOB
  • Converti i valori usando CONVERT TO .