mysqli — PHP & lt; == & gt; MySQL; хранение кириллицы / скандинавских символов в базе данных

Есть так много тем, посвященных этой теме, что я чувствую глупость спросить об этом.

Но я в полной растерянности относительно того, в чем может быть проблема.

Я пытаюсь вставить специальные символы (кириллицу, скандинавский и т. Д.) В базу данных MySQL через форму PHP (html).

Символы, такие как: Ä, Ö, Å, а также русский алфавит и т. Д.

Основываясь на предыдущих темах в этом форуме, я попробовал все следующее (вставлено сразу после строки подключения к базе данных MySQL):

    mysqli->set_charset("utf8");

Это не сработало, поэтому я попробовал следующее:

    mysqli_query("set names 'utf8'");
mysqli_query("set charset 'utf8'");

Это не рекомендуется PHP. Но я все равно попробовал, но все равно не повезло.

(Все мои базы данных, таблицы и столбцы сопоставлены как: utf8_general_ci)

Кроме того, все мои HTML-формы имеют следующее:

  <meta charset="utf-8">

Итак, я в полной растерянности относительно того, что я делаю неправильно. Как только данные отправляются в базу данных, они отображаются (в самой базе данных) как мусорные символы (знаки вопроса и другие иероглифы).

Однако самое смешное:

(а) Когда я просматриваю данные на своем веб-сайте, они отображаются правильно;

(б) Когда данные отправляются в теле письма, они также отображаются правильно

Так ………. почему он не отображается правильно в самой базе данных?

1

Решение

При работе с определенной кодировкой (например, UTF-8) важно, чтобы вся строка кода была установлена ​​на одну и ту же кодировку. Ниже приведены несколько советов, как следовать этому.

  • ВСЕ атрибуты должны быть установлены в ut8 (сопоставление НЕ так же, как кодировка в базе данных)
  • Вы должны сохранить сам документ как UTF-8 (если вы используете Notepad ++, это Формат -> Конвертировать в UFT-8 (или UTF-8 без спецификации), есть разница — оба или оба могут работать для вас)
  • Заголовок в PHP и HTML должен быть установлен в UTF-8:
    • HTML: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    • PHP: header('Content-Type: text/html; charset=utf-8');
  • После подключения к базе данных установите кодировку ti UTF-8 следующим образом:
    $connection->set_charset("utf8"); (сразу после подключения)
  • Также убедитесь, что ваша база данных и таблицы установлены в UTF-8, вы можете сделать это с помощью этого запроса (в базе данных это нужно сделать только один раз):

    ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Помните, что ВСЁ должно быть установлено в кодировке UFT-8. Если что-то можно установить на UFT-8 (или другую кодировку, проверьте PHP-docs (php.net)), это должно быть установлено на ту же кодировку, что и все остальное.

4

Другие решения

(а) Когда я просматриваю данные на своем веб-сайте, они отображаются правильно;

(б) Когда данные отправляются в теле письма, они также отображаются правильно

Это означает, что данные правильно хранятся в БД, когда вы получаете вывод, такой же, как ввод, логически правильно?

Другой вопрос: как вы смотрите в базу данных, какой тип клиента вы используете?

PHPMyAdmin, SomeDesktop Client .. Проблема будет там .. потому что данные хранятся правильно .. кажется так;)

0

По вопросам рекламы [email protected]