Pasar base de datos Mysql a la codificación utf8mb4

MySQL y utf8 parece que hace tiempo que pasaron a ser antiguas, ya las últimas versiones vienen por defecto en utf8mb4. ¿Y por qué? Muy sencillo utf8mb4 permite guardar más bytes en la codificación y de esta forma representar caracteres como los emojis.

Pasos a seguir para pasar tu base de datos a utf8mb4

Hacer copia de seguridad de la base de datos

Debido a que es una operación muy delicada y el cambio de codificación puede corromper los datos, guarda una copia de seguridad:

mysql -u USERNAME -h HOSTNAMEORIP DATABASENAME -p

Ten a mano el usuario administrador y el reinicio

Para reiniciar el servicio de la base de datos:

service mariadb restart

Para acceder por consola como usuario administrador:

mysql -uadmin -p`cat /etc/psa/.psa.shadow`

Pasar todas las tablas a InnoDB

Debes repasar tus tablas y que todas sean InnoDB, existen dos posibilidad o esta o MyISAM que es la que no queremos. Normalmente ya todas las tablas son InnoDB pero mejor asegúrate.

Pasar la Base de Datos a utf8mb4

ALTER DATABASE foronum CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

Configurar las variables globales

Puedes obtener los valores actuales con la siguiente consulta:

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'

Para configurar los valores que buscamos:

SET GLOBAL character_set_client = 'utf8mb4';
SET GLOBAL character_set_connection = 'utf8mb4';
SET GLOBAL character_set_database = 'utf8mb4';
SET GLOBAL character_set_results = 'utf8mb4';
SET GLOBAL character_set_server = 'utf8mb4';
SET GLOBAL collation_connection = 'utf8mb4_unicode_ci';
SET GLOBAL collation_database = 'utf8mb4_unicode_ci';
SET GLOBAL collation_server = 'utf8mb4_general_ci';

Si no se actualizan tendrás que incluirlo en el archivo my.cnf

En mi caso el archivo my.cnf  esta en /etc/my.cnf y acontinuación deberás reiniciar la base de datos. Según he visto en algún blog solo surge efecto los cambios a las nuevas base de datos, las que ya están creadas hay que cambiarlas de la forma que antes indico.

Pasar todas las tablas a utf8mb4

Te servirá este script para generar un script de copiar y pegar de todas las tablas:

SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 'AS alter_sql FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'nombre_bd'

Copia y pega y ejecútalo y se pasarán todas las tablas a formato utf8mb4 y su correspondiente codificación (collate). Después se recomienda pasar los varchar a 191

Si aún así te sigue sin funcionar prueba a ver:

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'

 

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *