Эта инструкция — о том, как безопасно конвертировать таблицы базы данных Cotonti в современную кодировку utf8mb4_unicode_ci и при необходимости перевести их на движок InnoDB.
Для чего она нужна
- Обновление кодировки таблиц:
- Старые базы Cotonti часто используют
utf8mb3(aliasutf8в MySQL), которая не поддерживает полные 4-байтовые символы, такие как эмодзи. - Конвертация в
utf8mb4_unicode_ciрешает проблемы с символами и улучшает совместимость.
- Старые базы Cotonti часто используют
- Обновление движка таблиц (Инструкция B):
- InnoDB современный и поддерживает транзакции, внешние ключи, лучше масштабируется.
- MyISAM устарел и ограничен в функционале.
Когда использовать эту инструкцию
- Перед обновлением Cotonti или модулей, которые используют новые функции или символы (например, emoji).
- Если на сайте появляются ошибки с вставкой символов (например, «Incorrect string value»).
- При переносе базы на новый сервер MySQL с поддержкой
utf8mb4. - При желании привести всю базу к одинаковой кодировке и движку для удобства поддержки и бэкапов.
То есть, к этой инструкции нужно прийти только тогда, когда планируется обновление базы, работа с современными символами или миграция, а также если нужно привести все таблицы к современным стандартам MySQL.
Инструкция A — Конвертируем только таблицы с utf8mb3_unicode_ci → utf8mb4_unicode_ci
Шаг 0 — Резервная копия
- В phpMyAdmin выбери базу
YOUR_DB_NAME. - Перейди во вкладку Export / Экспорт → режим Quick / Быстрый → формат SQL → нажми Go.
- Сохрани дамп на компьютер.
Шаг 1 — Определяем таблицы с utf8mb3_unicode_ci
- В phpMyAdmin выбери базу
YOUR_DB_NAME. - Перейди во вкладку SQL.
- Вставь запрос:
SELECT TABLE_NAME, TABLE_COLLATION
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'YOUR_DB_NAME'
AND TABLE_COLLATION = 'utf8mb3_unicode_ci'
ORDER BY TABLE_NAME;Если доступ к
information_schemaзакрыт, смотри колонку Collation в списке таблиц.
Шаг 2 — Генерация SQL для конвертации
Для каждой таблицы с кодировкой utf8mb3_unicode_ci используйте шаблон:
ALTER TABLE `PREFIX_cot_auth` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `PREFIX_cot_users` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `PREFIX_cot_com` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `PREFIX_cot_pages` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `PREFIX_cot_forum_posts` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `PREFIX_cot_forum_topics` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;Вставляйте только те таблицы, которые реально имеют
utf8mb3_unicode_ci.
Шаг 3 — Выполнение SQL
- phpMyAdmin → база
YOUR_DB_NAME→ вкладка SQL. - Вставьте подготовленные
ALTER TABLEкоманды и нажмите Go.
Шаг 4 — Проверка
Все выбранные таблицы должны иметь
utf8mb4_unicode_ci.
Инструкция B — Конвертируем всю базу Cotonti в utf8mb4_unicode_ci и переводим таблицы в InnoDB
Шаг 0 — Резервная копия
То же, что и в Инструкции A.
Шаг 1 — Установка кодировки базы (опционально)
- phpMyAdmin → база
YOUR_DB_NAME→ вкладка Operations / Операции. - В блоке Collation выберите
utf8mb4_unicode_ci. - Нажмите Go.
Если доступ закрыт, этот шаг можно пропустить.
Шаг 2 — Генерация SQL для всех таблиц
В phpMyAdmin → SQL:
SELECT CONCAT(
'ALTER TABLE `', TABLE_NAME,
'` ENGINE=InnoDB, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'
) AS sql_stmt
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'YOUR_DB_NAME'
ORDER BY TABLE_NAME;Это вернёт готовый список
ALTER TABLEдля всех таблиц.
Шаг 3 — Выполнение всех ALTER
- phpMyAdmin → база
YOUR_DB_NAME→ SQL. - Вставьте результат шага 2. Пример для стандартных таблиц Cotonti:
SET FOREIGN_KEY_CHECKS = 0;
ALTER TABLE `PREFIX_cot_auth` ENGINE=InnoDB, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `PREFIX_cot_users` ENGINE=InnoDB, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `PREFIX_cot_com` ENGINE=InnoDB, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `PREFIX_cot_pages` ENGINE=InnoDB, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `PREFIX_cot_forum_posts` ENGINE=InnoDB, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `PREFIX_cot_forum_topics` ENGINE=InnoDB, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `PREFIX_cot_forum_stats` ENGINE=InnoDB, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `PREFIX_cot_groups` ENGINE=InnoDB, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `PREFIX_cot_groups_users` ENGINE=InnoDB, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `PREFIX_cot_online` ENGINE=InnoDB, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `PREFIX_cot_logger` ENGINE=InnoDB, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `PREFIX_cot_config` ENGINE=InnoDB, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `PREFIX_cot_structure` ENGINE=InnoDB, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `PREFIX_cot_extrafields` ENGINE=InnoDB, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `PREFIX_cot_cache` ENGINE=InnoDB, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `PREFIX_cot_cache_bindings` ENGINE=InnoDB, CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
SET FOREIGN_KEY_CHECKS = 1;Добавьте остальные таблицы Cotonti в том же формате.
Шаг 4 — Проверка
SELECT TABLE_NAME, ENGINE, TABLE_COLLATION
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'YOUR_DB_NAME';Убедитесь, что
ENGINE = InnoDBиTABLE_COLLATION = utf8mb4_unicode_ciдля всех таблиц.