«Набор символов» - это кодировка символов в байтах.
«Сортировка» - это как сортировать символы.
INDEX
на VARCHAR
сортируется по его сопоставлению, поэтому изменение сопоставления столбца требует перестройки индекса - нетривиальная операция.
Разница между utf8 и utf8mb4 относительно невелика, но я не думаю, что MySQL (следовательно, RDS) сделал особый случай этого.
ALTER TABLE t CONVERT TO utf8mb4;
звучит как операция, которую вы желаете. Это требует ALGORITHM=COPY
, так что это «блокировка».
Посмотрите на pt-online-schema-change
и gh-ost
как способ изменения таблицы, даже когда ей нужно "скопировать". Это по существу неблокирующие. Однако я не знаю, можно ли их использовать с RDS. Кроме того, из-за JOINs
и других случаев, когда одна таблица может быть согласована с другой, эти инструменты могут оказаться непрактичными.
Другой подход ... Добавить еще один столбец (столбцы); измените код, чтобы использовать как старый, так и новый столбец (столбцы). Тем временем постепенно копируйте старые значения в новый столбец (столбцы); когда это закончится, измените свой код снова - на этот раз, чтобы использовать новый столбец (столбцы) вместо старого. Позже, подумайте о том, чтобы отбросить мертвые столбцы.
В последних версиях MySQL произошли значительные изменения в скорости ALTER
, поэтому обязательно изучите, из какой версии получена RDS. В 5.6 ADD COLUMN
можно использовать ALGORITHM=INPLACE
; в 8,0 ALGORITHM=INSTANT
. Я думаю, что любой из них не является "блокировкой" для ваших целей (DROP COLUMN
недешево; проблемы с JOIN
и индексами перестройки все еще обсуждаются.)
Если вы попробуете один из этих методов, я настоятельно рекомендую вам создать таблицу с минимум миллионами строк и попробовать все шаги (изменить, добавить, воссоздать индекс, изменить столбец и т. Д.), Чтобы проверить, какие части «достаточно быстро» и / или «не блокируется».