Un précédent LOAD DATA INFILE
a été exécuté en supposant que le fichier CSV est latin1
- codé. Au cours de cette importation, les caractères multi-octets ont été interprétés comme deux caractères simples, puis encodés à l'aide de utf-8 (à nouveau).
Ce double encodage a créé des anomalies comme ñ
au lieu de ñ
.
Comment corriger ces chaînes?
La fonction MySQL suivante renverra la chaîne utf8 correcte après un double encodage:
CONVERT(CAST(CONVERT(field USING latin1) AS BINARY) USING utf8)
Il peut être utilisé avec une instruction UPDATE
pour corriger les champs:
UPDATE tablename SET
field = CONVERT(CAST(CONVERT(field USING latin1) AS BINARY) USING utf8);
La réponse ci-dessus a fonctionné pour certaines de mes données, mais a entraîné de nombreuses colonnes NULL après l'exécution. Ma pensée est que si la conversion n'a pas réussi, elle renvoie null. Pour éviter cela, j'ai ajouté un petit chèque.
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