Подтвердить что ты не робот

Как исправить двойные кодированные символы UTF8 (в таблице utf-8)

Предыдущий LOAD DATA INFILE был запущен в предположении, что файл CSV latin1 -encoded. Во время этого импорта многобайтовые символы интерпретировались как два одиночных символа, а затем кодировались с использованием utf-8 (снова).

Это двойное кодирование создало аномалии типа ñ вместо ñ.

Как исправить эти строки?

4b9b3361

Ответ 1

Следующая функция MySQL вернет правильную строку utf8 после двойного кодирования:

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

Он может использоваться с оператором UPDATE для исправления полей:

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

Ответ 2

Вышеупомянутый ответ сработал для некоторых моих данных, но после запуска он получил много столбцов NULL. Я думал, что если преобразование не было успешным, оно возвращает null. Чтобы этого избежать, я добавил небольшую проверку.

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