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

Escrito el , visto 2481 veces Ver usuariopor

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


Comentarios

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

    Citar »
  2. 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.

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

    Citar »
  4. Antes que me olvide:

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

    Citar »
  5. 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

    Citar »
  6. Lograr resolver estas cosas en una sentencia se siente glorioso

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

    Citar »

Deje su comentario:

(comentarios ofensivos o que no hagan al enriquecimiento del post serán borrados/editados por el administrador sin previo aviso)

Security Image

Negrita Cursiva Imagen Enlace

Guardar los datos: Si / No