Справочники, инструменты, документация

SQL: Как включить вывод символов эмодзи на сайте

Поддержка символов Emoji становятся все больше, но на сайтах использующие PHP и MySQL символы могут не поддерживаться из-за неправильной кодировки, в результате выводятся одни ??? вместо 😺😸😹.

Так-как эмодзи являются символами юникода, то все скрипты и страницы сайта должны быть в кодировке UTF-8.

  1. В PHP при подключении к БД нужно указать кодировку utf8mb4:
SET NAMES 'utf8mb4'

В PDO имеется возможность указать кодировку при подключении:

$dbh = new PDO('
    mysql:dbname=db_name;host=localhost', 
    'user', 
    'password', 
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4'")
);

Если используется расширение MySQL:

$link = mysql_connect('localhost', 'user', 'password');
mysql_select_db('db_name');
mysql_query("SET NAMES 'utf8mb4'");
$mysqli = new mysqli('localhost', 'user', 'password', 'db_name');
$mysqli->query("SET NAMES 'utf8mb4'");
  1. В MySQL тексты обычно хранятся в кодировке utf8_general_ci, эта кодировка не поддерживает эмодзи, поэтому нужно перекодировать их в utf8mb4_general_ci.

Запрос на перекодировку нужно сделать единоразово для всех таблиц базы, у которых планируется использование символов. Запросы можно выполнить в PhpMyAdmin.

ALTER TABLE `table1` CONVERT TO CHARACTER SET utf8mb4;
ALTER TABLE `table2` CONVERT TO CHARACTER SET utf8mb4;
ALTER TABLE `table3` CONVERT TO CHARACTER SET utf8mb4;
ALTER TABLE `table4` CONVERT TO CHARACTER SET utf8mb4;