Mysql: Cómo recuperar una tabla con caracteres Latin1 mal pasados a UTF-8

Demasiado específico el post así que le dejé un título acorde :D cada tanto hago posteos de "trabajo" con tips que voy descubriendo, sino ni yo me acuerdo cómo se hacía :P

Más de una vez en un servidor alguien "rompe" todos los textos porque hace una mala conversión, en alguna importación pasan una base de datos que estaba en Latin1 y no la convierten en UTF-8, la mandan así directo.

Los caracteres con tildes o símbolos quedan todos mal:

á = á
é = é
í- = í
ó = ó
ñ = ñ
á = Á


Le pasó a un amigo hoy y se lo solucioné de la forma más sencilla que existe, un simple query:

UPDATE tabla SET texto =
CONVERT(BINARY CONVERT(texto USING latin1) USING utf8);


Me encanta cuando una solución tiene tan pocos caracteres, es genialmente elegante.

Ahora bien, salvedades, si hay contenido mixto, algunos en UTF-8 y otros en Latin1 pueden romper lo que ya estaba bien, así que úsenlo con un WHERE que separe una cosa de la otra. Obviamente hagan el debido backup antes de usar esto.

Y para aquellos que quieran soporte de Emojis en la tabla sí o sí recomiendo usar utf8mb4 como Collation porque utf8 a secas no lo soporta y te va a dar error si querés insertar uno

Si te gustó esta nota podés...
Invitame un café en cafecito.app


Otros posts que podrían llegar a gustarte...

Comentarios

  • Hugo     04/12/2017 - 12:30:09

    je, me hubiese venido bien hace unos meses... por suerte no era mucho y lo hice con varios replace de texto en la base

  • Mauro A. Meloni     04/12/2017 - 12:31:32

    Ouch. Cómo te comprendo!

    En la oficina me conocen por mi improperio "PERO... LA RECODIFICACIÓN DE CARACTERES !!!" (a grito estridente, agónico, desesperanzado) clásica de cuando me ha tocado migrar bases con encoding incorrecto o procesar HTML cuya codificación está mal especificada.

    Afortunadamente ya he dejado esas bases atrás, pero me afano tu sentencia por si caen de vuelta en algún momento.

  • Lelale     04/12/2017 - 12:40:16

    Juuuuuuuuuuuuuuuuuuuusto a un compañero de trabajo le pasa algo de esto, si lo veo le paso el link.

  • Lelale     04/12/2017 - 12:43:11

    Antes que me olvide:

    Hitaso! "No te olvides de poner el where en el delete from!!!!"

  • Rotietip     04/12/2017 - 14:09:41

    Lelale dijo:

    Antes que me olvide:

    Hitaso! "No te olvides de poner el where en el delete from!!!!"

    Se te olvido el tema: https://www.youtube.com/watch?v=i_cVJgIz_Cs

  • Andrezgz     04/12/2017 - 14:19:04

    Lograr resolver estas cosas en una sentencia se siente glorioso

  • Gustavo Alonso     11/12/2017 - 13:51:22

    Hace poco descubrí el iif en Sql. Nunca mas los malditos Case When.
    Con que poco uno se contenta.

Deje su comentario:

Tranquilo, su email nunca será revelado.
La gente de bien tiene URL, no se olvide del http/https

Negrita Cursiva Imagen Enlace


Comentarios ofensivos o que no hagan al enriquecimiento del post serán borrados/editados por el administrador. Los comentarios son filtrados por ReCaptcha V3.