15 49.0138 8.38624 1 0 4000 1 https://www.alexmedina.net 300 true 0

Pasar base de datos Mysql a la codificación utf8mb4

0 Comments

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.

Contenido

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 (esto es solo para PLESK, sino debes hacerlo de forma normal):

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.

[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
character-set-client = utf8mb4
[mysql]
default-character-set = utf8mb4

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%'
Previous Post
Desestructuración de objetos en Javascript
Next Post
Empezando con GitHub

0 Comments

Leave a Reply

SOBRE MÍ

Afortunado de trabajar en lo que me gusta, aprendiendo cada día cosas nuevas y ayudando a crear proyectos.
Conocimientos en diversas tecnologías y experiencia demostrable.
¿Nos ponemos manos a la obra?

Mis Apuntes