Как сохранять emoji utf8mb4 в mysql на shared хостинге?

Всем доброго дня, такой вопрос - есть shared хостинг на reg.ru, пытаюсь сохранять в базу mysql emoji в кодировке utf8mb4 (в utf8 они вообще не записываются), но в базе сохраняется и при чтении из базы вместо каждого emoji символа, выводится ????. Само подключение к базе происходит через скрипт
$link = mysql_connect('localhost', 'u0088888_default', 'pass');
    mysql_select_db('u0088888_default', $link);
    mysql_query("SET NAMES 'utf8mb4'"); 
    mysql_query("SET CHARACTER SET 'utf8mb4'");
    mysql_query("SET SESSION collation_connection = 'utf8mb4_unicode_ci'");

сделал перекодировку базы по инструкции https://goo.gl/Cfkj2h кроме редактирования my.cnf (к нему у меня нет доступа),
запрос SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; выдаёт
33014ec5d2c54214a300e4de2ae323af.png , хотя по инструкции должно выдавать
63840f2604e44764aab615d3bb646071.png

теперь сам вопрос - как без редактирования my.cnf решить проблему сохранения emoji в базу?
  • Вопрос задан
  • 3931 просмотр
Решения вопроса 1
@eandr_67
web-программист (*AMP, Go, JavaScript, вёрстка).
Чтобы сохранять символы с кодами больше 0xFFFF недостаточно задать кодировку сессии, необходимо чтобы таблицы базы данных имели кодировку utf8mb4. Пересоздай таблицы БД с явным указанием кодировки utf8mb4.

Но учти, что максимальная длина индексного значения в БАЙТАХ при этом не меняется. Потому, если у тебя есть индексы по полям типа VARCHAR, то для utf8mb4 (4 байта на символ вместо 3 у utf8) длина этих полей не должна превышать 191 символ (255*3/4).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы