Как исправить двойные кодированные символы UTF8 (в таблице utf-8)
Предыдущий LOAD DATA INFILE
был запущен в предположении, что файл CSV latin1
-encoded. Во время этого импорта многобайтовые символы интерпретировались как два одиночных символа, а затем кодировались с использованием utf-8 (снова).
Это двойное кодирование создало аномалии типа ñ
вместо ñ
.
Как исправить эти строки?
Ответы
Ответ 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