Pages, Articles & News
Tools & Plugins
Example / Placeholder Title


Description as an example placeholder. Sample text content for further customization of the "Index36" template.

You are free to edit and customize the template however you like. If you don’t have time or enough knowledge — you can always order template adaptation by contacting me via GitHub or private messages on the digital goods marketplace.

2025-08-29 19:24

Эта инструкция — о том, как безопасно конвертировать таблицы базы данных Cotonti в современную кодировку utf8mb4_unicode_ci и при необходимости перевести их на движок InnoDB.


Для чего она нужна

  1. Обновление кодировки таблиц:
    • Старые базы Cotonti часто используют utf8mb3 (alias utf8 в MySQL), которая не поддерживает полные 4-байтовые символы, такие как эмодзи.
    • Конвертация в utf8mb4_unicode_ci решает проблемы с символами и улучшает совместимость.
  2. Обновление движка таблиц (Инструкция B):
    • InnoDB современный и поддерживает транзакции, внешние ключи, лучше масштабируется.
    • MyISAM устарел и ограничен в функционале.

Когда использовать эту инструкцию

  • Перед обновлением Cotonti или модулей, которые используют новые функции или символы (например, emoji).
  • Если на сайте появляются ошибки с вставкой символов (например, «Incorrect string value»).
  • При переносе базы на новый сервер MySQL с поддержкой utf8mb4.
  • При желании привести всю базу к одинаковой кодировке и движку для удобства поддержки и бэкапов.

То есть, к этой инструкции нужно прийти только тогда, когда планируется обновление базы, работа с современными символами или миграция, а также если нужно привести все таблицы к современным стандартам MySQL.

 

Инструкция A — Конвертируем только таблицы с utf8mb3_unicode_ciutf8mb4_unicode_ci

Шаг 0 — Резервная копия

  1. В phpMyAdmin выбери базу YOUR_DB_NAME.
  2. Перейди во вкладку Export / Экспорт → режим Quick / Быстрый → формат SQL → нажми Go.
  3. Сохрани дамп на компьютер.

Шаг 1 — Определяем таблицы с utf8mb3_unicode_ci

  1. В phpMyAdmin выбери базу YOUR_DB_NAME.
  2. Перейди во вкладку SQL.
  3. Вставь запрос:
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

  1. phpMyAdmin → база YOUR_DB_NAME → вкладка SQL.
  2. Вставьте подготовленные ALTER TABLE команды и нажмите Go.

Шаг 4 — Проверка

 
SELECT TABLE_NAME, TABLE_COLLATION
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'YOUR_DB_NAME'
AND TABLE_COLLATION LIKE 'utf8mb4_%';
 
 

Все выбранные таблицы должны иметь utf8mb4_unicode_ci.


Инструкция B — Конвертируем всю базу Cotonti в utf8mb4_unicode_ci и переводим таблицы в InnoDB

Шаг 0 — Резервная копия

То же, что и в Инструкции A.

Шаг 1 — Установка кодировки базы (опционально)

  1. phpMyAdmin → база YOUR_DB_NAME → вкладка Operations / Операции.
  2. В блоке Collation выберите utf8mb4_unicode_ci.
  3. Нажмите 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

  1. phpMyAdmin → база YOUR_DB_NAME → SQL.
  2. Вставьте результат шага 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 для всех таблиц.

This post was edited by webitproff (2025-08-29 20:55, 9 months ago)
Account