Consejos para la migración de MySQL UTF/Unicode
-
09-06-2019 - |
Pregunta
¿Alguien tiene algún consejo o momento a tener en cuenta al intentar migrar tablas MySQL desde los conjuntos de caracteres predeterminados suecos o ascii que no distinguen entre mayúsculas y minúsculas a utf-8?Algunos de los proyectos en los que estoy involucrado buscan una mejor internacionalización y la base de datos será una parte importante de este cambio.
Antes de intentar modificar la base de datos, convertiremos cada sitio para que utilice la codificación de caracteres UTF-8 (de menos crítica a más) para ayudar a garantizar que todas las entradas y salidas utilicen el mismo conjunto de caracteres.
Gracias por cualquier ayuda
Solución
Algunas sugerencias:
- Su
CHAR
yVARCHAR
Las columnas utilizarán hasta 3 veces más espacio en disco.(Probablemente no obtendrás mucho espacio en disco para palabras suecas). - Usar
SET NAMES utf8
antes de leer o escribir en la base de datos.Si no hace esto, obtendrá caracteres parcialmente confusos.
Otros consejos
Voy a revisar los siguientes sitios/artículos para ayudar a encontrar una respuesta.
Preguntas frecuentes sobre UTF-8 y Unicode
Episodio de Hansel Minutes "Resolviendo la internacionalización con Michael Kaplan"
Y también encontré una publicación muy sobre el tema de Derek Sivers @ O'Reilly ONLamp Blog mientras escribía esto. Convertir datos de MySQL en latin1 a utf8 utf-8
Tenga cuidado con las limitaciones de longitud del índice.Si una tabla está estructurada, diga:
una tecla Varchar (255) B Varchar (255) ('A', 'B')
Vas a superar el límite de 1000 bytes en la longitud de las claves.255+255 está bien, pero 255*3 + 255*3 no va a funcionar.
Su
CHAR
yVARCHAR
Las columnas utilizarán hasta 3 veces más espacio en disco.
Solo si están repletos de latín-1 con ordinales > 128.De lo contrario, el mayor uso de espacio de UTF-8 es mínimo.
Las colaciones no siempre son favorables.Obtendrá diéresis cotejadas con versiones sin diéresis, lo que no siempre es correcto.Es posible que desee utilizar utf8_bin, pero todo también distingue entre mayúsculas y minúsculas.