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;
Support and development of web projects on the CMF Cotonti: private messengers via the website, open and closed small social networks, trading platforms and marketplaces, freelance and services exchange portal, catalogs of goods from wholesale suppliers, dropshipping platforms, online stores, and much more.