Está en la página 1de 12

Guía para Cambiar la Base de

Datos de Utf8 a Utf8mb4


26 noviembre, 2017 Diógenes Mata Blogging 11 Comentarios

15

Hacer cambios en la base de datos, es ese tipo de cosas que rehúye la


mayoría de la gente, sobre todo si hablamos de cambiar charset y
cotejamiento de Utf8 a Utf8mb4.

Pero es necesario si necesitamos implementar algunas mejoras en


nuestra web, y en muchos casos es obligatoria al momento de actualizar
nuestro CMS.
En este artículo te enseñaré cómo convertir tu base de datos de Utf8 a
Utf8mb4 de forma sencilla y práctica, sin que sea necesario ser un experto
en MySQL o MariaDB .

Contenido del post [Ocultar]

¿Por qué es necesario cambiar a Utf8mb4?


Juego de caracteres o Charset
Cotejamiento de una base de datos
MyISAM o InnoDB
Formato de tablas en MySQL
¿Es necesario migrar a Utf8mb4?
Cambiando el formato de tablas en MySQL o
MariaDB
Cambiando el motor de búsqueda: de MyISAM a
InnoDB
Convirtiendo el juego de caracteres y cotejamiento
de Utf8 a Utf8mb4
Ajustando el tamaño máximo de las columnas en
las tablas

¿Por qué es necesario cambiar a


Utf8mb4?
Porque la mayoría de los CMS lo necesitan para las nuevas
implementaciones y mejoras.

Esta respuesta te puede parecer simple, pero si entiendes que son los
juegos de caracteres y el cotejamiento, lo comprenderás mejor.

Juego de caracteres o Charset


En una base de datos se almacenan caracteres (cada letra, número,
símbolo, es un carácter), y estos deben ser reconocibles por quien los lee.

Como existen miles de caracteres en el mundo y su uso varía


dependiendo de la región geográfica, lengua, etc. debemos colocarle a
nuestra base de datos un charset para que admita los caracteres que
nos interesa.

Por ejemplo, si hablas chino mandarín, querrás tener un charset que


admita los caracteres propios de esta lengua. En el caso del español, es
necesario que la base de datos reconozca la ñ o las tildes, por ejemplo.

Teniendo esto claro, verás la importancia de escoger el charset


adecuado al momento de crear una base de datos, ya que después de
hacer la conversión puede ser algo complejo.

¡Pero, tranquilo!, que no es nada del otro mundo, para eso está este post
.

Como las bases de datos están en constante mejora, hace algunos años
el Utf8 era el recomendado, pero ahora el Utf8mb4 es lo actual.
Además, son totalmente compatibles.

Los CMS actuales para agregar nuevas funcionalidades requieren usar el


Utf8mb4. Un ejemplo típico de esto, son los emojis, sin él no
tendrás soporte completo para ellos.

Estos emojis no podrás colocarlos en tu web: si el juego de


caracteres del campo donde se almacenan es Utf8.

Cotejamiento de una base de datos


El cotejamiento son las reglas que permiten comparar caracteres en la
base de datos y como se ordenan.
Por ejemplo: el manejo de las doble l: “LL”, se manejará y ordenará
diferente dependiendo del cotejamiento que tengamos.

El cotejamiento está relacionado con el charset que tengamos. Por


ejemplo:

Charset: Utf8mb4 Cotejamiento: Utf8mb4_unicode_520_ci

MyISAM o InnoDB
MyISAM e InnoDB son dos populares motores de almacenamiento en las
bases de datos.

A partir de la versión 5.6 de MySQL, InnoDB ofrece un mejor


rendimiento y soporte nativo para búsqueda de texto completo, por lo
que en mi opinión ya no vale la pena permanecer en MyISAM.

En lo particular trabajo con InnoDB y para esta guía te mostraré como


migrar hacia él si tienes MyISAM.

Formato de tablas en MySQL


Esto se está poniendo complejo , pero espera, que ya terminamos la
teoría.

El formato de tablas usado en MySQL o MariaDB, es otro


aspecto relevante en el cambio de Utf8 a Utf8mb4.

En MySQL o MariaDB los formatos de las tablas usadas


son: Antelope o Barracuda.

Con Antelope la máxima longitud en bytes que puede tener las


columnas e índices es de 767.

Utf8mb4 soporta hasta 4 bytes en cada carácter, cuando lo


multiplicamos por los 255 máximos que pueden tener las columnas, nos
excederemos si tenemos Antelope (4×255= 1020 > 767). Con una
longitud de 191 estaremos justo por debajo en su máxima capacidad
(4×191=764 < 767).

Esto significa, que si tenemos Antelope deberemos cambiar a 191


aquellos índices que excedan esta cifra.

Con barracuda no tendremos este problema, ya que soporta 3072


bytes . Pero cambiarlo dependerá de si tienes acceso a modificar el
formato de archivos de MySQL o MariaDB en tu servidor.

¿Es necesario migrar a Utf8mb4?


No, no es obligatorio ni necesario. Si tu web funciona bien, y tu CMS no te
pide que lo cambie, puedes permanecer con él.

Lo que si puede ocurrir es que estés limitado de cara al futuro, y mientras


más crece tu base de datos con la adición de nuevas columnas y
campos, más complejo será hacer el cambio cuando lo necesites.
Es tu elección: quedarte anclado al presente, o trabajar para el futuro.
¡Oye, sin presión! .

Ejemplo de esto es Moodle, que en su versión 3.3 requiere este tipo de


cotejamiento y charset para su funcionamiento ordinario.

¡Adivina! ¿qué soporte ofrecerá en esta versión?. Pues sí, soporte


completo para emojis .

WordPress desde la versión 4.2 cambio su cotejamiento de Utf8 a


Utf8mb4.

Después de este montón de explicaciones técnicas, vamos por lo que


viniste. Aprieta el cinturón porque vienen curvas .

Haz un respaldo de tu base de datos, por si falla algo. Te


recomiendo que hagas pruebas en un localhost y después la
ejecutes en tu servidor en producción. Te dejo esta guía que
puede ser de ayuda.

Si vas a ejecutar los cambios a tu servidor en producción


(funcionamiento en la web) recomiendo ponerlo en
mantenimiento mientras lo ejecutas. En WordPress
este plugin cumple con esa misión.

Cambiando el formato de tablas en


MySQL o MariaDB
Para saber si tu servidor tiene el formato de tablas Barracuda, entra en el
phpMyAdmin de tu servidor. Dirígete a la pestaña SQL y en el campo en
blanco escribe:

1 show variables like "%innodb_file%";

Dale clic al botón Continuar.

Si en pantalla te muestra innodb_file_format


Antelope y innodb_file_format_max Antelope, debemos cambiarlo a
Barracuda.
En servidores compartidos (shared hosting) es probable que no
puedas hacer estos cambios. De ser así, deberás optar por
llevar los índices a 191 como te explico más adelante.

Te recomiendo consultes con tu hosting para obtener


información.

En servidores auto administrados, como los VPS, accede a la


línea de comando mediante SSH.

Logueate como root en tu servidor, luego entrar a MySQL con este


comando:

1 mysql -u root –p

Te pedirá la contraseña del root de MySQL.

Luego debemos ubicar el archivo my.cnf(dependerá del tipo y versión del


sistema operativo de tu servidor). En Debían está ubicado en /etc/mysql/
Lo editamos con el comando: nano my.cnf

Ubica la línea [mysqld] y debajo copia este código:

1 innodb_file_format = Barracuda
2 innodb_large_prefix = 1
3 innodb_file_per_table = 1
4 innodb_file_format_max = Barracuda
5 default-storage-engine = InnoDB

Guarda los cambios con las teclas: Ctrl + O y confirmándolo con la


tecla Enter.

Reinicia MySQL con el comando: /etc/init.d/mysqld restart

Ahora entra nuevamente en phpMyAdmin y en la pestaña SQL colocamos


nuevamente:

1 show variables like "%innodb_file%";

Si todo salió bien deberás ver


ahora:innodb_file_format e innodb_file_format_maxcon Barracuda.

Cambiando el motor de búsqueda:


de MyISAM a InnoDB
Vamos a phpMyAdmin, en la pestaña SQL, introduce esto:
1 SET @DATABASE_NAME = 'nombre_bd';
2 SELECT CONCAT('ALTER TABLE `', table_name, '` ENG
3 FROM information_schema.tables AS tb
4 WHERE table_schema = @DATABASE_NAME
5 AND `ENGINE` = 'MyISAM'
6 AND `TABLE_TYPE` = 'BASE TABLE'
7 ORDER BY table_name DESC;

Sustituye nombre_bd por el nombre de la base de datos que quieras


modificar. Cuida de no borrar las comillas.

Luego haz clic a Continuar.

En la pantalla resultante, en sql_statements nos mostrará las tablas que


tengan el motor de búsqueda MyISAM junto con las líneas de código para
cambiarlo a InnoDB (si lo ves incompleto anda aquí).

Copia este código.

Si son muchas las tablas resultantes (generalmente más de 25),


en el menú desplegable Numero de filas (ubicado en la parte
inferior) selecciona un número mayor a 25, para que puedas
visualizar y copiarlas todas.

Selecciona la base de datos a modificar del menú a la izquierda. Vamos


ahora nuevamente a la pestaña SQL (siempre con la base de datos
seleccionada) y pega en el espacio en blanco el código copiado. Dale
al botón Continuar.

Espera mientras se ejecuta el cambio, y al finalizar debemos tener toda


nuestra base de datos con el nuevo motor de búsqueda.

Compruébalo seleccionando la base de datos; en la columna Tipo, deben


mostrarse todas con InnoDB.
Convirtiendo el juego de caracteres
y cotejamiento de Utf8 a Utf8mb4
El charset y cotejamiento lo debemos cambiar en la base de datos, así
como en cada tabla y columna.

Primero lo cambiaremos para la base de datos globalmente. Pon este


código en la pestaña SQL:

1 ALTER DATABASE nombre_bd CHARACTER SET = utf8mb4

Cambia nombre_bd por el nombre de tu base de datos. Haz clic


a Continuar.

En segundo lugar, lo haremos en las tablas y columnas. Vamos


nuevamente a la pestaña SQL, copiamos este código y lo ejecutamos
con Continuar.

1 SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.',TAB


2 AS alter_sql
3 FROM information_schema.TABLES
4 WHERE TABLE_SCHEMA = 'nombre_bd';

Como antes, reemplaza nombre_bd con el nombre tu base de datos y


dale a Continuar. Obtendrás unos comandos que deberás copiar.

Es posible que solo los veas parcialmente:

También podría gustarte