Я думаю, что лучший подход - изменить столбцы на тип BLOB
, а затем изменить их обратно на TEXT
или VARCHAR
или еще много чего, например:
ALTER TABLE table_name MODIFY column_name BLOB;
ALTER TABLE table_name MODIFY column_name ~~~~~ CHARACTER SET utf8;
где ~~~~~
- это тип, который вы хотите, например, VARCHAR(20)
(что, кстати, означает «20 символов», а, к счастью, не «20 байтов»).
Причина, по которой я предлагаю перейти по BLOB
, заключается в том, что если вы только что сделали это:
ALTER TABLE table_name MODIFY column_name ~~~~~ CHARACTER SET utf8;
тогда MySQL будет пытаться обновить каждую запись, чтобы преобразовать ее из Latin-1 в UTF-8 & mdash; что будет правильным, но ненужным и медленным. (Подход "сквозной-* 1015" - это , что документация рекомендует делать , когда ваш столбец определен как CHARACTER SET latin1
, но ошибочно содержит данные UTF-8, чтобы избежать ошибочного преобразования. в вашем случае преобразование не является ошибочным, но все равно не требуется.)
Вероятно, также лучше заранее отбросить любые индексы и затем заново их создать.
Важный отказ от ответственности: Вы должны проверить вышеупомянутое предположение, используя старый снимок, который вы упомянули. Возможно, что переключение на BLOB
и обратно также будет медленным и дорогостоящим, и в этом случае я полагаю, что вам лучше просто выполнить одиночное преобразование. Я думаю, что это будет зависеть от механизма хранения.
Кстати, мне было бы интересно услышать результаты вашего теста. : -)