symnoob, Текстовые.
Менять надо для каждой таблицы:
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Дополнительно можно поменять для базы:
ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Rsa97, ни для таблицы, ни для тем более БД менять ничего не надо. тем более что это бессмысленно, ибо будет применяться только к заново создаваемым таблицам и полям, и не повлияет на существующие. fiddle
Менять надо определение конкретного поля.
symnoob, Риски есть. Если, например, стоял чарсет latin1, а данные писались в utf8, то при конвертации всё полетит.
Но никто и не делает такие процедуры сразу на боевом сервере, всегда проверяется сначала на копии базы.
а менять collation на продуктивном сервере это безопасно?
Изменение атрибута COLLATE поля повлияет на выполнение любых запросов, связанных с обработкой этого поля (сравнения, явные в выражениях и неявные при работе встроенных функций). Как это отразится на работе сервера и его приложений, мы предсказать не в состоянии.
Но вообще-то речь шла об изменении не COLLATE поля, а о CHARACTER SET. Это гораздо более критичная операция, она повлияет на работу с этим полем гарантированно и весьма серьёзно.
Гораздо разумнее выполнять преобразование в нужную кодировку передаваемого параметра прямо в тексте запроса INSERT/UPDATE, с помощью функции CONVERT().
Akina, Rsa97 вот ещё один вопрос, как быть если нужно подогнать collation для ключей? Например в таблицах присутствуют поля varchar в которых лежит uuid? Тогда что делать?