Сегодня я преобразовал базу данных mysql 5.7 в utf8mb4.
В качестве теста я положил poo emoji (💩) в поле, используя Navicat.
Он отлично отображает Navicat, даже если я уйду и снова открою программу.
Проблема возникает, когда я извлекаю его с помощью PDO в своем скрипте и повторяю его в браузере; Я получаю (6 диагональных черных вопросительных знаков).
Если я копирую символ непосредственно в свой скрипт и эхо-сигнал, он работает.
Так что это не проблема с mysql.
Это не проблема с шрифтом.
Это не проблема с моим браузером.
Это не проблема с эхом.
Итак … это проблема с PDO?
Это мой код PDO:
$PDO = new PDO('mysql:host='.DB_SERVER.';dbname='.DB_NAME.';charset=utf8mb4', DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false ]); $PDO->query("SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'"); $rs = $PDO->query("SELECT name FROM users WHERE id = 1000"); // name has been set to 💩 while ($a = $rs->fetch()) { print_r($a); }
Если я проверяю вывод SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
в php в браузере каждый выход правильно utf8mb4
/ utf8mb4_unicode_ci
(кроме character_set_system
который просто utf8
, но я думаю, что это нормально?)
Что еще это может быть?