Я пытаюсь сохранить символ эмодзи в запись базы данных, но каждый раз он не сохраняется должным образом. Я сослался на это Как сохранить символ Emoji в моей базе данных SQL но по-прежнему не работает.
В соответствии с решением вышеуказанного вопроса я попытался изменить набор символов с utf8 на utf8mb4 и сопоставление с utf8mb4_bin.
Я пробовал все, например, сброс настроек по умолчанию, а затем их изменение в таблице базы данных. Я пробовал utf8mb4_unicode_ci, utf8_unicode_ci и utf8mb4_bin, но это не работает.
Я использую версию MySQL 5.6. И я меняю сопоставление с запросом ниже
alter table `users` convert to character set utf8mb4 collate utf8mb4_bin;
Приведенный выше код работает нормально, он меняет тип UTF в базе данных. Но смайлики не сохраняются должным образом, они сохраняются как вопросительные знаки (????)
Ниже приведен пример структуры таблицы моей базы данных:
CREATE TABLE IF NOT EXISTS `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'System generated id used for uniqueness',
`introduction` longtext COLLATE utf8mb4_bin,
`other_details` longtext COLLATE utf8mb4_bin,
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=41213 ;
Чтобы сохранить эмодзи с помощью приведенного ниже PHP-кода:
$dom = new DOMDocument('1.0', 'UTF-8');
$strWithEmoji = "????";
$fullContent = '<meta http-equiv="content-type" content="text/html; charset=utf-8">'
+ $strWithEmoji;
$this->save($fullContent); // Function for saving into database
Я не знаю точно, сколько байтов хранится, но я пытаюсь сохранить только этот символ эмодзи «????», и он сохраняет его как 4 вопросительных знака (????).
Я перепробовал все решения по приведенным ниже ссылкам, но у меня это не сработало:
Как сохранить символ эмодзи в моей базе данных SQL
UTF-8 полностью
Окончательная схема кодирования эмодзи а>
SHOW CREATE TABLE
для таблицы в вопросе. Кроме того, удалите все фреймворки/сторонние библиотеки из своего вопроса и предоставьте только код php+pdo/mysqli, который демонстрирует проблему. - person zerkms   schedule 09.10.2017