Cómo corregir los caracteres UTF8 con doble encoding (en una tabla utf-8)

Un LOAD DATA INFILE se ejecutó bajo la suposición de que el archivo CSV está codificado en latin1. Durante esta importación, los caracteres multibyte se interpretaron como dos caracteres individuales y luego se codificaron utilizando utf-8 (nuevamente).

Esta doble encoding creó anomalías como ñ lugar de ñ .

¿Cómo corregir estas cadenas?

La siguiente función de MySQL devolverá la cadena utf8 correcta después de la doble encoding:

 CONVERT(CAST(CONVERT(field USING latin1) AS BINARY) USING utf8) 

Se puede usar con una instrucción UPDATE para corregir los campos:

 UPDATE tablename SET field = CONVERT(CAST(CONVERT(field USING latin1) AS BINARY) USING utf8); 

La respuesta anterior funcionó para algunos de mis datos, pero dio como resultado muchas columnas NULL después de ejecutarse. Mi pensamiento es que si la conversión no fue exitosa, devuelve nulo. Para evitar eso, agregué un pequeño cheque.

 UPDATE tbl SET col = CASE WHEN CONVERT(CAST(CONVERT(col USING latin1) AS BINARY) USING utf8) IS NULL THEN col ELSE CONVERT(CAST(CONVERT(col USING latin1) AS BINARY) USING utf8) END