Почему не записываются emoji в базу данных?
При записи эмоджи из редактора, в базу данных записываются знаки вопроса. Такая кодировка в phpmyadmin
. В wp-config.php прописано это
. Вот что выводит вордпресс по базе данных
. И так же он пишет это предупреждение
. Тема сайта чистая, не трогал руками совсем, с самого начала такая проблема с записью. Пробовал менять версии php, не помогает. Если записывать символ эмоджи прям в phpmyadmin, то записывается, но при выводе знаки вопроса. Вот что ответили в техподдержке хостинга: "Значит тут проблема именно в самом WP и php, либо emoji несовместимы с mariadb, а так как у нас она везде, то у меня нет предложений." Куда копать, где искать проблему?
Дополнительно
Михаил Р. @Mike_Ro Python, JS, WordPress, SEO, Bots, Adversting Бд mysql wp должна иметь кодировку utf8mb4 (поддерживает хранение символов юникод втч. эмоджи), а вот utf8 в mysql не поддерживает 4 байтные символы, к которым относятся и эмоджи, из за чего они заменяются на знаки вопроса.
wp-config.php:
define('DB_CHARSET', 'utf8mb4'); define('DB_COLLATE', 'utf8mb4_unicode_ci'); |
define('DB_CHARSET', 'utf8mb4'); define('DB_COLLATE', 'utf8mb4_unicode_ci');
И изменяем кодировку таблицы бд c utf8 на utf8mb4.
- тогда какое решение?
- vvvadimos,
Бд mysql wp должна иметь кодировку utf8mb4
- vvvadimos, изменить кодировку самой бд и изменить wp-config.php
- В phpmyadmin так:
В файле wp-config.php так:
Предупреждение вопрдпресса осталось. Вот что показывает вопрдпрес в админке:
Нужно менять кодировку всей mysql, которую в случае с shared хостингом может поменять только техподдержка?
- vvvadimos, попробуйте Как правильно сменить кодировку базы данных Wordpress? (соответственно, в обратном порядке), ну и надеюсь, Вы этим занимаетесь на тестовом проекте?
- Михаил Р., проект только стартует в разработке
Ответы:
Тебе нужно установить utf8mb4_general_ci не только в таблицах базы, но и в самой БД.
Для этого можно в PMA выйти на уровень выше твоё БД и там установить сопоставление
ЗЫ. В зависимости от настроек сервера это может не сработать. Тогда настраивать на сервере.
UPD. В wp-config.php должно быть
define('DB_CHARSET', 'utf8mb4');
utf8mb4, а не utf8
- выставил:
все равно вопросы записывает
- vvvadimos, дополнил ответ. Не сразу заметил твой косяк конфиге. Буквами, а не картинками надо показывать код.
- vvvadimos, у тебя в вопросе одно сопоставление таблиц, а теперь другое.. Ты б определился уже с ним
- Refguser, так я прописываю то что вы мне пишете)
- в общем прописал и выставил везде utf8mb4 utf8mb4_general_ci , записывает вопросы
но странно что если руками в phpadmin в таблицу вставить, то все ок. тогда как бы напрашивается вывод, что это вордпресс неправильно записывает. НО: раньше была на другом проекте эта проблема, и при переносе на другой сервер, там эмоджи вставлялись без проблем - vvvadimos, вордпресс всё правильно записывает. Согласно настройкам ПО на сервере.
И не просто копипастить с ответов (интернета), а думать что оно значит и для чего. - Refguser, это понятно что думать нужно. только я ж сюда пришел потому что не думается, правильно?)
выставил utf8mb4, utf8mb4_general_ci, как писал ранее, не сработало. написал в техподдержку еще раз - vvvadimos, в какую поддержку?! 0_0
Если правильно выставил кодировку, но все ещё "не работает", то надо вызывать специалистов, чтобы смотрели изнутри. - Refguser, в техподдержку сервера, которая например может подсказать в чем проблема.
отметил ваш первый ответ решением, хоть он и не решение - vvvadimos, приём тут техподдержка сервера? Это вообще не их забота.
отметил ваш первый ответ решением
Нет, мой ответ ты не отметил вообще никак.
-
нужно установить utf8mb4_general_ci не только в таблицах базы, но и в самой БД.
Не нужно
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос











Emoji превращаются в вопросительные знаки, когда на одном из уровней используется кодировка, не поддерживающая 4-байтовые Unicode-символы. В MySQL/MariaDB обычный
utf8— это не настоящий полный UTF-8, для emoji нуженutf8mb4. Проверять нужно не толькоwp-config.php, но и базу, таблицы, колонки и соединение.Минимальные проверки в SQL:
SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%'; SHOW FULL COLUMNS FROM wp_posts LIKE 'post_content'; SHOW TABLE STATUS LIKE 'wp_posts';
Для WordPress в
wp-config.phpобычно ставят:define('DB_CHARSET', 'utf8mb4'); define('DB_COLLATE', '');
Пустой
DB_COLLATEпозволяет WordPress выбрать подходящую collation. Если таблицы уже созданы вutf8, одной правки конфига мало. Нужна конвертация таблиц, например:ALTER TABLE wp_posts CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE wp_comments CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE wp_options CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Перед ALTER обязателен бэкап базы. Если вместо emoji уже сохранены
???, исходные символы восстановить нельзя: база получила уже испорченные данные, их нужно вставить заново после исправления кодировки.utf8mb4работают нормально.Если хостинг не даёт менять параметры базы, просите поддержку перевести базу и таблицы WordPress на
utf8mb4.