• Resuelto Ana Cirujano

    (@acirujano)


    Hola, buenas, compañeroas/as.

    Hoy traigo un caso de sistemas, a ver si me podéis echar una mano, por favor.

    Tras migrar de servidor, ha cambiado la codificación de caracteres de la base de datos y me devuelven 404 todas las imágenes y PDFs que tienen caracteres con tildes. La web tiene español, francés y portugués, con lo que son cientos los nombres de archivo que tienen caracteres no admitidos.

    Ahora mismo en la base de datos en producción están guardados esos caracteres modificados con % y otros caracteres extraños, por eso da error 404, porque no coincide lo que está en la base de datos con el nombre del archivo.

    He probado a cambiar la codificación de caracteres de la base de datos a UTF8, exportarla como mysql40 y volver a importarla, pero esto no soluciona el problema.

    En local sí funciona todo correctamente. Pero al subirlo a producción, da el error.

    Si subimos a Medios un archivo nuevo con ñ, sí funciona, porque ya utiliza la codificación correcta de caracteres.

    He probado a subir toda la carpeta UPLOADS con un TAR.GZ pero no ha funcionado porque claro, hace falta modificar también la base de datos.

    Creo que la solución sería:
    1) Reemplazar los archivos (con Enable Media Replace, uno a uno, sabiendo que son cientos).
    2) Intentar modificar todos los caracteres en la base de datos con un script.
    3) Que alguien conozca un plugin como el Enable Media Replace pero que funcione por lotes o un Regenerate Thumbnails que valga para PDFs y no solo para imágenes (esto no lo he probado en las imágenes pero me imagino que sí funcionaría).

    ¿A alguno/a de vosotros/as le ha pasado algo parecido? ¿Cómo lo habéis solucionado?

    ¡Muchas gracias de antemano!

Viendo 9 respuestas - de la 1 a la 9 (de un total de 9)
  • Moderador Mariano Perez

    (@mpcdigital)

    Tiene pinta de que al exportarlo, aunque se marque que la base de datos en UTF8, el archivo importado no esté en UTF8 y los datos sí. Así al importarlo, se hace la picha un lío.

    Si es eso, puedes intentar pasar el archivo exportado a UTF8 real antes de importarlo, aquí se explica como hacerlo:

    http://www.oscar-dominguez.com/desarrollo-web/solucionar-error-al-importar-una-base-datos-mysql-utf-8/

    ¡Suerte!

    Tuve un error similar con un PHP legacy. Me ocurrió que tenía guardados valores en UTF-8 en las tablas con las columnas en latin1. En local me iba bien, el server me decía que ya tal.

    Para solucionarlo:
    UPDATE table SET column = @txt WHERE char_length(title) = LENGTH(@txt := CONVERT(BINARY CONVERT(title USING latin1) USING utf8));
    ALTER TABLE comments MODIFY title VARCHAR(255) CHARACTER SET utf8;

    Referencias:
    https://jonisalonen.com/2012/fixing-doubly-utf-8-encoded-text-in-mysql/
    https://coderwall.com/p/gjyuwg/mysql-convert-encoding-to-utf8-without-garbled-data
    https://nicj.net/mysql-converting-an-incorrect-latin1-column-to-utf8/

    A ver si tirando por estos lares te ayuda :-).

    Iniciador del debate Ana Cirujano

    (@acirujano)

    ¡Muchas gracias, Mariano!

    Lo vamos a probar y te cuento.

    ¡Un abrazo!

    Con hacer un find/replace el la bd de esos caracteres acentuados valdría ¿no?

    Moderador Mariano Perez

    (@mpcdigital)

    Normalmente no vale porque la relación caracteres acentuados -> símbolo raro no es uno a uno. Puede que un ç sea un é o una í u otra cosa en diferentes partes.

    Iniciador del debate Ana Cirujano

    (@acirujano)

    ¡Buenas tardes!

    Finalmente solucionamos el problema con un script que reemplaza los caracteres con tildes, uno a uno (tildes en todas las vocales, acentos graves, diéresis, acentos circunflejos, tanto en mayúsculas como en minúsculas… etc.). Preferimos hacerlo en los archivos y no en la base de datos porque siempre tiene menos riesgo.

    ¡Muchas gracias a todos por vuestra ayuda!

    Ana

    Iniciador del debate Ana Cirujano

    (@acirujano)

    @cbravobernal, acabo de leer ahora tu mensaje, no sé por qué el otro día no lo vi. La verdad es que la base de datos ya estaba en UTF8… el problema era que en la base de datos las tildes estaban más arriba que en los nombres de los archivos. Una cosa muy rara… pero ya lo solucionamos, como comento en el post anterior.

    Muchas gracias de todas formas y seguro que tu aportación, con enlaces y todo, ayuda a alguien más.

    Un abrazo,

    Ana

    Muy buenas, soy novato en el tema. Me podeis decir como lo solucionasteis?

    Los problemas de codificaciones extrañas pueden producirse por varios motivos tanto en url como en contenido. En mi experiencia los más comunes son:

    – Por cambio de versión de Mysql al migrar, normalmente de una versión superior a una inferior. En este caso las URL mal se quedan en base de datos por lo que normalmente se soluciona volviendo a exportar la db en un formato planto tipo mysql40.

    – Por diferente interpretación del navegador. En este caso se produce el cambio de código porque se añaden a través del navegador textos con diferente formato, por lo que quedan los textos con palabras extrañas en la base de datos. La única solución es el replace del contenido.

    – Por cambio de codificación en el SO. Esto ocurre cuando se migran ficheros de una versión con un UTF diferente en el SO. En este caso los ficheros quedan con los signos diferentes y la base de datos de WordPress los interpreta como diferentes y por tanto es necesario reescribir los nombres de los ficheros para que la base de datos los interprete como debería.

    En este caso que describe Ana, el problema era la última opción, por lo que a través de la línea de comandos fuimos modificando los caracteres extraños de los ficheros y las urls volvieron a su formato correcto.

Viendo 9 respuestas - de la 1 a la 9 (de un total de 9)
  • El debate ‘Tras migrar, error 404 en archivos con tildes’ está cerrado a nuevas respuestas.