sql >> Base de Datos >  >> RDS >> Mysql

¿Es esta una forma segura de convertir tablas MySQL de latin1 a utf-8?

Hay 3 casos diferentes a considerar:

De hecho, los valores están codificados usando Latin1

Este es el caso consistente:juego de caracteres declarado y coincidencia de codificación de contenido. Este fue el único caso que cubrí en mi respuesta inicial.

Usa el comando que sugeriste:

ALTER TABLE tablename CONVERT TO CHARSET utf8 COLLATE utf8_bin

Tenga en cuenta que CONVERT TO CHARACTER SET El comando solo apareció en MySQL 4.1.2, por lo que cualquiera que use una base de datos instalada antes de 2005 tuvo que usar un truco de exportación/importación. Esta es la razón por la que hay tantos scripts y documentos heredados en Internet que lo hacen a la antigua.

Los valores ya están codificados usando utf8

En este caso, no desea que mysql convierta ningún dato, solo necesita cambiar los metadatos de la columna.

Para esto, primero debe cambiar el tipo a BLOB, luego a TEXT utf8 para cada columna, para que no haya conversiones de valor:

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

Esta es la forma recomendada y está explícitamente documentada en Alterar Documentación de sintaxis de tabla .

Los valores se usan en una codificación diferente

La codificación predeterminada fue Latin1 durante varios años en algunas distribuciones de Linux. En este caso, tienes que usar una combinación de las dos técnicas:

  • Corrige los metadatos de la tabla usando el truco del tipo BLOB
  • Convierta los valores usando CONVERT TO .