Ocstore/OpenCart Emoji Fix ПРОБЛЕМА: В ocStore 3.0.3.7 не сохраняются эмодзи в описании товаров
Если вы пробуете вставить эмодзи (🚀🌟🎉) в описание, заголовок, meta-title или другие текстовые поля в ocStore (OpenCart), они или отрезаются, или сохраняются как ???, или вообще не проходит сохранение.
ocStore 3.0.3.7 не сохраняет эмодзи в описаниях товаров и других текстовых полях, потому что по умолчанию база данных и таблицы используют кодировку utf8 (три байта), которая не поддерживает символы с 4 байтами (эмодзи и некоторые редкие символы).
Чтобы эмодзи отображались и сохранялись корректно, нужно перевести базу, таблицы и поля на кодировку utf8mb4 — расширенный вариант utf8, который поддерживает 4-байтные символы.
Как это сделать для всей базы данных — пошагово
Шаг 1. Создайте резервную копию базы данных!
Прежде чем менять кодировку — сделайте полную резервную копию вашей базы. Это важно, чтобы можно было восстановиться в случае ошибки.
В phpMyAdmin:
Выберите базу данных
Нажмите "Экспорт"
Выберите формат SQL и нажмите "ОК" / "Выполнить"
Шаг 2. Проверьте текущую кодировку базы и таблиц
Выполните в SQL-запросах phpMyAdmin:
-- Посмотреть кодировку базы данных SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = 'ваше_имя_базы';
-- Посмотреть кодировку таблиц SELECT TABLE_NAME, TABLE_COLLATION FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'ваше_имя_базы';
Если вы видите utf8_general_ci или похожее — это 3-байтовая кодировка. Шаг 3. Измените кодировку базы данных
Выполните запрос:
ALTER DATABASE `ваше_имя_базы` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
Шаг 4. Измените кодировку всех таблиц и колонок Вариант 1 — для каждой таблицы и всех текстовых колонок вручную
Для каждой таблицы сделайте:
ALTER TABLE `имя_таблицы` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Это изменит кодировку таблицы и всех её текстовых полей (VARCHAR, TEXT) на utf8mb4. Вариант 2 — автоматизировать (пример для phpMyAdmin или MySQL консоли)
Выполните такой запрос, который сгенерирует список команд для всех таблиц:
SELECT CONCAT('ALTER TABLE `', TABLE_NAME, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;') AS sql_cmd FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'ваше_имя_базы';
Скопируйте полученный список команд и выполните их.
Шаг 5. Проверьте и исправьте настройки подключения к базе в ocStore
В файле подключения к базе (обычно config.php и admin/config.php) убедитесь, что используется правильная кодировка:
В вашем PHP-коде после подключения к базе должно быть примерно:
$this->db->query("SET NAMES 'utf8mb4'"); $this->db->query("SET CHARACTER SET utf8mb4"); $this->db->query("SET COLLATION_CONNECTION = 'utf8mb4_unicode_ci'");
Или если используете mysqli напрямую:
$this->connection->set_charset("utf8mb4");
Шаг 6. Очистите кеш ocStore и проверьте
Очистите кеш системы (в админке или вручную удалите папки кеша)
Проверьте, что теперь эмодзи сохраняются и отображаются корректно в описаниях товаров и других полях.
Итог
Теперь вся ваша база и все таблицы работают с кодировкой utf8mb4 — значит эмодзи можно спокойно сохранять и отображать!
Как это сделать для только для таблицы описания товаров базы данных — пошагово
Если вы пробуете вставить эмодзи (🚀🌟🎉) в описание, заголовок, meta-title или другие текстовые поля в ocStore (OpenCart), они или отрезаются, или сохраняются как ???, или вообще не проходит сохранение.
Причина: база или поля в ней используют кодировку utf8, которая не умеет хранить эмодзи. Нужно использовать utf8mb4.
РЕШЕНИЕ: переход на utf8mb4
Всё нижее делается в phpMyAdmin.
ШАГ 1. Проверьте кодировку базы данных
Зайдите в phpMyAdmin.
В левой части выберите свою базу (где ocStore).
Всверху выберите вкладку "Операции".
Проверьте значение кодировки. Если utf8, нажмите "Изменить" и выставьте utf8mb4_unicode_ci.
ШАГ 2. Измените кодировку таблиц
В phpMyAdmin выберите таблицу oc_product_description
Нажмите "SQL" и введите:
ALTER TABLE `oc_product_description` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Затем прогоните:
ALTER TABLE `oc_product_description`
MODIFY `name` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
MODIFY `description` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
MODIFY `tag` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
MODIFY `meta_title` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
MODIFY `meta_description` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
MODIFY `meta_keyword` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
MODIFY `meta_h1` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Оказываю весь спектр услуг по CMF Cotonti. Разработка открытых и закрытых корпоративных интернет порталов, небольших социальных сетей, торговые площадки, маркетплейсы, биржи фриланса, каталоги товаров оптовых поставщиков, интернет-магазин под заказ, чтобы делать совместные покупки и групповые совместные продажи от имени нескольких продавцов.