Эмодзи в OpenCart: кодировки MySQL и правка mysqli.php для корректного хранения
Если в OpenCart попытаться сохранить эмодзи (например, в описании товара, отзыве, категории или даже в SEO-полях), часто происходит одно из следующего: символы превращаются в ????, не сохраняются вовсе или вызывают ошибку записи в базу данных. Почти всегда причина одна - база данных и/или соединение с MySQL используют кодировку utf8 (фактически utf8mb3), которая не поддерживает 4-байтовые символы.
Эмодзи относятся именно к 4-байтовым символам, поэтому для их корректной работы в OpenCart требуется переход на utf8mb4.
utf8mb3).?, либо отказывает в записи.utf8mb4.На практике эмодзи чаще всего применяют не только в текстах, но и в маркетинговых элементах:
Поэтому важно перекодировать именно те таблицы, где такие данные реально хранятся.
План действийutf8mb4.Перед любыми изменениями обязательно сделайте дамп базы:
mysqldump -u USER -p DB_NAME > backup.sql
Для больших баз рекомендуется сразу сжимать:
mysqldump -u USER -p DB_NAME | gzip > backup.sql.gz
Шаг 2. Перевод базы и таблиц в utf8mb4
2.1. Кодировка базы по умолчанию
ALTER DATABASE `DB_NAME`
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Это задаёт кодировку по умолчанию, но не всегда автоматически перекодирует существующие таблицы.
2.2. Перекодировка таблицОсновные таблицы OpenCart, где чаще всего нужны эмодзи:
oc_product, oc_product_descriptionoc_category, oc_category_descriptionoc_reviewoc_information, oc_information_descriptionПример команды:
ALTER TABLE oc_product_description
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Повторите для всех нужных таблиц.
Рекомендация для LiveStore и ocStoreДля сборок LiveStore и ocStore на практике рекомендуется сразу перекодировать все основные таблицы с текстовыми данными, а не делать это выборочно.
Это позволяет избежать ситуаций, когда эмодзи корректно работают, например, в товарах, но ломаются в отзывах, статьях или блоге.
ALTER TABLE oc_review CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_review_article CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_article_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_blog_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_information_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_product_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Такой подход считается безопасным и предпочтительным для LiveStore и ocStore при условии, что перед выполнением команд сделан резервный дамп базы данных.
2.3. Проверка колонок
SHOW FULL COLUMNS FROM oc_product_description;
Если отдельные поля остались в utf8, их можно изменить точечно:
ALTER TABLE oc_product_description
MODIFY `description` LONGTEXT
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Шаг 3. Исправление соединения с MySQL в OpenCart
Даже при правильной кодировке таблиц эмодзи не будут сохраняться, если соединение с MySQL устанавливается в utf8.
Откройте файл:
system/library/db/mysqli.php
Найдите строку:
$this->connection->set_charset("utf8");
И замените её на:
$this->connection->set_charset("utf8mb4");
Если в проекте используется другой драйвер (mpdo, mysql), проверьте аналогичную настройку и там.
Шаг 4. Проверка результата
Для быстрой проверки корректной работы кодировки utf8mb4 используйте эмодзи, которые гарантированно являются 4-байтовыми символами.
Скопируйте и вставьте следующий текст в любое текстовое поле OpenCart:
Тест эмодзи: ? ? ? ? ? ❤️ ⭐ ?
Если после сохранения эмодзи корректно хранятся в базе данных и отображаются на витрине сайта, значит кодировка и соединение с MySQL настроены правильно.
Если же символы превращаются в знаки вопроса или пропадают, значит где-то всё ещё используется utf8 вместо utf8mb4.
set_charset всё ещё utf8).<meta charset="UTF-8"> в шаблоне.После этого эмодзи будут стабильно сохраняться и корректно отображаться во всех частях магазина - от описаний товаров до SEO-полей и писем.
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | Авторизация через иностранные сервисы в интернет-магазине OpenCart в России | 0 | 7.32 | 15-06-2026 |
| 2 | Интернет-магазин одежды и обуви на OpenCart: собственные продажи без комиссий маркетплейсов | 0 | 6.96 | 20-07-2026 |
| 3 | Welcome to emoji school | 0 | 2 | 26-03-2026 |
| 4 | ГигантФильтр для OpenCart - современный SEO-фильтр нового поколения для интернет-магазинов | 0 | 10.95 | 18-05-2026 |
| 5 | Как не терять заявки в OpenCart: сайт, Авито и мессенджеры в одном окне | 0 | 4.22 | 02-07-2026 |
| 6 | adafruit-circuitpython-display-emoji-text 1.0.5 | 0 | 30 | 14-08-2026 |
| 7 | Freitag ist World Emoji Day: Nur jede und jeder Zehnte nutzt gar keine Emojis | 0 | 6 | 16-07-2026 |
| 8 | The Best Way to Design a Database for an eCommerce Shop: Unique Tips and Best Practices #ecommerce #programming | 0 | 6.76 | 07-05-2026 |
| 9 | 7 WooCommerce CRMs with a Working Free Tier in 2026 #wordpress #ecommerce | 0 | 12.07 | 04-08-2026 |