База данных MySQL хранит вопросительные знаки вместо специальных символов
Я пытаюсь отобразить ОЧЕНЬ специальные символы (например) внутри моего веб-сайта и сохранить их в своей базе данных. Когда я пишу специальные символы, подобные этим, они отображаются один раз, но когда я перезагружаю страницу и сервер получает строку из базы данных, она отображается как "????????????????????????? " Я пытался сделать много вещей, чтобы это исправить, но ни одна из них не сработала. Это не проблема визуализации, потому что заголовок установлен правильно:
<meta charset="utf-8">
Что я пытался сделать:
- Установка кодировки по умолчанию для сервера в utf8.
- Установка свертки базы данных / таблицы / столбца и набора символов в utf8mb4_unicode_ci
- Изменение строки подключения на:
$db = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$db->query("SET character_set_results=utf8mb4");
mb_language('uni');
mb_internal_encoding('UTF-8');
$db->query("SET NAMES utf8mb4");
$db->set_charset('utf8mb4');
Но ничего из этого не сработало. Кроме того, я попытался (только для отладки) изменить строку в текстовом поле базы данных на, и я получил ошибку:
Предупреждение: #1300 Неверная строка символов utf8: 'F09D91'
Предупреждение: #1366 Неверное строковое значение: '\xF0\x9D\x91\xBB\xF0\x9D...' для столбца 'текст' в строке 1
Я действительно пробовал каждое решение, которое нашел здесь и за его пределами, но ничего не получалось. Любая помощь будет оценена.
1 ответ
Как обсуждено в комментариях.
Во многих случаях вам нужно разместить весь код, следующий$db->query("SET character_set_results=utf8mb4");
до этой линии.
Также может помочь использование другой кодировки файлов.
Я должен был сделать это сам раньше, как ни странно. Это также может быть кодировка сервера по умолчанию, которая может где-то переопределять; У меня была эта проблема и раньше.
Кроме того, если вы запрашиваете куда-то, например, при выполнении SELECT, UPDATE или INSERT, тогда важно, чтобы коды кодирования были помещены перед запросом, в этом случае.