В общем, ситуация такая. По ошибке залил дамп с битой кодировкой.
Я знаю, из какой кодировки и в какую мне надо конвертнуть, чтобы пофиксить. Но как это сделать?
UPDATE table SET
field = CONVERT(CAST(CONVERT(field USING latin1) AS BINARY) USING utf8);
Но, на действительно большие таблицы оно не подойдет, ибо на ссд по читается 10-12к записей в секунду, а записывается всего 300-500 штук... т.е. 1кк строк будет обновляться 41 минуту... Если более 100кк — не дождешься никогда...
увы, но дамп будет заливаться пару дней (около ~20 гигов из инсертов и апдейтов). Хотя, после длительного гугления, найденный способ оказался еще дольше.
Это не вызывает перекодировку данных. Первая директива задает кодировку по умолчанию для базы данных - теперь все операции создания таблиц без указания кодировки будут брать кодировку указанную для базы. Вторая директива задает кодировку по умолчанию для таблицы - теперь все операции создания таблиц, в которых не указана кодировка для текстового поля будут принимать кодировку из таблицы.
Если уж менять кодировку для поля - то надо указывать конкретное поле в операторе alter table. Но даже это не вызовет перекодировку данных - просто указывается с какой кодировкой по умолчанию теперь интерпретировать эти данные.