Cómo convertir una base de datos MySQL a UTF-8

MySQLSQL

El formato UTF-8 es un método de codificación de caracteres de longitud variable que representa caracteres según el estándar Unicode. Es la codificación más extendida en internet desde hace más de una década.

A pesar de que MySQL soporta UTF-8. Es habitual que MySQL seleccione por defecto otro tipo de codificación latina al crear las tablas, lo cual puede conllevar a ciertos problemas o limitaciones en el futuro. En esta guía vamos a ver cómo convertir la codificación de caracteres de cualquier base de datos MySQL al estándar UTF-8. De este modo, los campos de la base de datos podrán soportar una gran cantidad de caracteres y lenguajes.

Cómo saber cuál es codificación de caracteres de MySQL

Si quieres saber cuál es la codificación de caracteres por defecto de una base de datos MySQL o de una tabla en concreto, sigue estos pasos:

  1. Accede a MySQL desde la línea de comandos, ya sea en servidor o en tu ordenador local, como usuario root. o como cualquier otro usuario con acceso a la base de datos. Puedes hacerlo con este comando reemplazando usuario por el nombre de usuario con el que quieres identificarte:
    mysql -u usuario -p

    Al pulsar Enter tendrás que introducir la contraseña del usuario que has indicado. Se mostrará el prompt de MySQL.

  2. Para ver la codificación de caracteres de una base de datos, realiza la siguiente consulta SQL, reemplazando base_de_datos por el nombre de la base de datos:
    SELECT default_character_set_name FROM information_schema.SCHEMATA S WHERE schema_name = "base_de_datos";
  3. También puedes ver la codificación de caracteres de una tabla en concreto de una base de datos. Para ello, utiliza la siguiente consulta SQL, reemplazando base_de_datos por el nombre de la base de datos y tabla por el nombre de la tabla:
    SELECT CCSA.character_set_name FROM information_schema.`TABLES` T,information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA WHERE CCSA.collation_name = T.table_collation AND T.table_schema = "base_de_datos" AND T.table_name = "tabla";
  4. Una vez hecho esto, puedes salir de la aplicación de mysql escribiendo \q, al igual que ocurre con muchas otras aplicaciones para Unix.

Una vez sepas la codificación de caracteres de una base de datos, podrás cambiarla si así lo deseas.

Cómo convertir la codificación de caracteres de una base de datos MySQL a UTF-8

Podrás convertir la codificación de caracteres de cualquier base de datos a UTF-8 siguiendo estos pasos:

Accede a la línea de comandos de tu servidor mediante SSH o abre una ventana de Terminal si estás en tu entorno local.

  1. Crea un archivo llamado .my.cnf en tu directorio actual usando cualquier editor. Puedes hacerlo sencillamente con el editor nano usando el siguiente comando:
    nano .my.cnf

    Creamos el archivo para que el comando mysql lo detecte, evitando tener que identificarnos en MySQL cada vez que accedemos. Esto es opcional.

  2. Agrega las siguientes líneas al archivo, reemplazando usuario por el nombre de usuario con el que accedes a MySQL y contraseña por la contraseña de dicho usuario.
    [client]
    user=usuario
    password="contraseña"

    Pulsa Ctrl+X para guardar el archivo e introduce Y en el mensaje de confirmación para confirmar los cambios.

  3. Para cambiar la codificación de caracteres a UTF-8 para todas las tablas existentes en una vase de datos, puedes usar el siguiente comando, reemplazando todas las ocurrencias de base_de_datos por el nombre de la base de datos:A
    mysql --database=base_de_datos -B -N -e "SHOW TABLES" | awk '{print "SET foreign_key_checks = 0; ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; SET foreign_key_checks = 1; "}' | mysql --database=base_de_datos

    De este modo se alterarán la codificación de caracteres de las tablas existentes. Si no puedes ejecutar el comando anterior, prueba a ejecutarlo como usuario root.

  4. Hemos cambiado la codificación de las tablas, pero no de la base de datos. Es recomendable cambiarla para que las futuras tablas que creemos utilicen la codificación UTF-8. Accede a mysql desde la línea de comandos. Si has creado el archivo del primer paso basta con que escribas:
    mysql

    Si no has creado el archivo usa el comando del siguiente modo, reemplazando usuario por root o por un nombre de usuario con acceso a la base de datos:

    mysql -u usuario -p
  5. Ahora ejecuta la siguiente consulta para cambiar la codificación de la base de datos, reemplazando base_de_datos por el nombre de la base de datos:
    ALTER DATABASE base_de_datos CHARACTER SET utf8 COLLATE utf8_general_ci;
  6. Ya puedes salir de mysql tecleando \q. También puedes borrar el archivo .my.cnf. Puedes hacerlo con el comando rm:
    rm .my.cnf

Para comprobar que la codificación de caracteres se ha cambiado correctamente, sigue los pasos del primer apartado.

Extra: UTF-8mb4

Resulta que, a pesar de que se supone que UTF-8 debería soportar de uno a 4 bytes por caracter, en realidad solamenta soporte 3, suponiendo esto un pequeño error de diseño jamás corregido.

Para arreglar esto, los creadores de MySQL lanzaron la codificación de caracteres utf8mb4 en el año 2010. El formato utf8mb4 sí soporta 4 bytes para codificar un caracter, siendo estos usados para codificar ciertos emoticonos que tan de moda están a día de hoy. Es por ello que, sin duda alguna, te recomendamos que utilices utf8mb4 en lugar de utf-8


Avatar de Edu Lazaro

Edu Lázaro: Ingeniero técnico en informática, actualmente trabajo como desarrollador web y programador de videojuegos.

👋 Hola! Soy Edu, me encanta crear cosas y he redactado esta guía. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirla en Twitter 😊

Si quieres conocer mis proyectos, sígueme en Twitter.

“- Hey, Doc. No tenemos suficiente carretera para ir a 140/h km. - ¿Carretera? A donde vamos, no necesitaremos carreteras.”