Hola
se que el tema está muy muy manido, pero bueno, hay veces que ni siquiera con lo que no sabe da con la clave. El tema es muy común, un cliente nos pasa un .sql de una BD que utilizaba latin1, para más señas, era una bd en servidores de Arsys.
En las filas se puede ver el problema, que los acentos se guardan en latin(iso)
'Que la fuerza te acompañe...'
'Fotos de una expedición '
Ahora el problema lo tengo yo, porque debería poder importar esa BD a nuestro server. Yo hice migraciones de webs mias sin problemas, porque desde el inicio, utilicé UTF y cuando moví a mi server, no me resultó complejo. Ahora es diferente.
La configuración del servidor viejo era:
CHARSET=latin1
COLLATE=latin1_spanish_ci;
La del nuevo es:
CHARSET=utf8
COLLATE=utf8_general_ci;
El tema está en que, en la BD de arsys vi que los acentos se guardaban bien, pero, al hacer el backup de la bd, los acentos y otros carácteres pasaron a la forma extraña que antes he escrito.
Lo que hemos intentado es, con una BD pequeña, arreglar todos los acentos de los campos de tal forma que ha quedado así:
'Que la fuerza te acompañe...'
'Fotos de una expedición '
Es decir, lo hemos cambiado a pelo. Pero ni aún así, con los acentos bien consigo importar bien la BD. He cambiado en .sql todos los latin1 por utf8 y latin1_spanish_ci por utf8_general_ci pero ni así, sólo he probado de importar con phpmyadmin.
Entonces, lo que hice fue examinar las variables de MySQL relativas a este problema, dentro de la consola de mysql ejecutamos "show variables like 'char%';" y obteníamos esto
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
por defecto, habían algunas variables como set_client, set_connection(!) o set_results que utilizaban latin1. Hice un cambio en el my.cnf y reinicié mysqld
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
para acabar con esta configuración despues de los cambios. Pues bien, entonces volví a importar la BD para comprobar que esta vez sí, los acentos físicamente se guardaban bien en los diferentes campos. ¿Qué ha cambiado? La configuración del MySQL server, pero entonces la gran duda que tengo es
¿Porque no podía insertar bien los acentos si en el .sql estaban correctamente?
En resumen, con un backup con los acentos correctamente guardados pude importar a UTF8 después de hacer cambios en la configuración de MySQL.