Почему не записываются emoji в базу данных?

Ссылка скопирована
1 ответ

При записи эмоджи из редактора, в базу данных записываются знаки вопроса. Такая кодировка в phpmyadmin

Почему не записываются emoji в базу данных?

. В wp-config.php прописано это

Почему не записываются emoji в базу данных?

. Вот что выводит вордпресс по базе данных

Почему не записываются emoji в базу данных?

. И так же он пишет это предупреждение

Почему не записываются emoji в базу данных?

. Тема сайта чистая, не трогал руками совсем, с самого начала такая проблема с записью. Пробовал менять версии php, не помогает. Если записывать символ эмоджи прям в phpmyadmin, то записывается, но при выводе знаки вопроса. Вот что ответили в техподдержке хостинга: "Значит тут проблема именно в самом WP и php, либо emoji несовместимы с mariadb, а так как у нас она везде, то у меня нет предложений." Куда копать, где искать проблему?

Дополнительно

Почему не записываются emoji в базу данных?

Михаил Р. @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 так:

    Почему не записываются emoji в базу данных?

    В файле wp-config.php так:

    Почему не записываются emoji в базу данных?

    Предупреждение вопрдпресса осталось. Вот что показывает вопрдпрес в админке:

    Почему не записываются emoji в базу данных?

    Нужно менять кодировку всей mysql, которую в случае с shared хостингом может поменять только техподдержка?

  • vvvadimos, попробуйте Как правильно сменить кодировку базы данных Wordpress? (соответственно, в обратном порядке), ну и надеюсь, Вы этим занимаетесь на тестовом проекте?
  • Михаил Р., проект только стартует в разработке

Ответы:

Тебе нужно установить utf8mb4_general_ci не только в таблицах базы, но и в самой БД.
Для этого можно в PMA выйти на уровень выше твоё БД и там установить сопоставление

Почему не записываются emoji в базу данных?

ЗЫ. В зависимости от настроек сервера это может не сработать. Тогда настраивать на сервере.

UPD. В wp-config.php должно быть
define('DB_CHARSET', 'utf8mb4');
utf8mb4, а не utf8

  • выставил:

    Почему не записываются emoji в базу данных?

    Почему не записываются emoji в базу данных?

    все равно вопросы записывает

  • vvvadimos, дополнил ответ. Не сразу заметил твой косяк конфиге. Буквами, а не картинками надо показывать код.
  • vvvadimos, у тебя в вопросе одно сопоставление таблиц, а теперь другое.. Ты б определился уже с ним
  • Refguser, так я прописываю то что вы мне пишете)
  • в общем прописал и выставил везде utf8mb4 utf8mb4_general_ci , записывает вопросы
    но странно что если руками в phpadmin в таблицу вставить, то все ок. тогда как бы напрашивается вывод, что это вордпресс неправильно записывает. НО: раньше была на другом проекте эта проблема, и при переносе на другой сервер, там эмоджи вставлялись без проблем
  • vvvadimos, вордпресс всё правильно записывает. Согласно настройкам ПО на сервере.
    И не просто копипастить с ответов (интернета), а думать что оно значит и для чего.
  • Refguser, это понятно что думать нужно. только я ж сюда пришел потому что не думается, правильно?)
    выставил utf8mb4, utf8mb4_general_ci, как писал ранее, не сработало. написал в техподдержку еще раз
  • vvvadimos, в какую поддержку?! 0_0
    Если правильно выставил кодировку, но все ещё "не работает", то надо вызывать специалистов, чтобы смотрели изнутри.
  • Refguser, в техподдержку сервера, которая например может подсказать в чем проблема.
    отметил ваш первый ответ решением, хоть он и не решение
  • vvvadimos, приём тут техподдержка сервера? Это вообще не их забота.

    отметил ваш первый ответ решением

    Нет, мой ответ ты не отметил вообще никак.

  • нужно установить utf8mb4_general_ci не только в таблицах базы, но и в самой БД.

    Не нужно

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Редакция Security Ответ

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';

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', '');

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 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 уже сохранены ???, исходные символы восстановить нельзя: база получила уже испорченные данные, их нужно вставить заново после исправления кодировки.

  • MariaDB совместима с emoji, проблема не в самом факте MariaDB.
  • phpMyAdmin может показывать одно, а соединение WordPress использовать другое.
  • На старых версиях MySQL возможны ограничения индексов, но современные WordPress и MariaDB с utf8mb4 работают нормально.

Если хостинг не даёт менять параметры базы, просите поддержку перевести базу и таблицы WordPress на utf8mb4.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно