Вместо текста вопросительные знаки

Знаки вопросов в MySQL вместо русских букв — исправляем проблему кодировки MySQL

Вместо текста вопросительные знаки

26.04.2019

При переносе дампа или после нескольких манипуляций в базе неожиданно появились знаки вопросов в MySQL вместо русских букв? Это известная и распространённая проблема в MySQL старших версий.

Это руководство поможет предпринять быстрые шаги в исправлении ситуации.

Мы рассмотрим конкретные действия для быстрого решения. Обратите внимание на официальное руководство по кодировке в MySQL, чтобы вы смогли разбираться в сути и выполнять рекомендации осознанно.

Исправляем знаки вопросов в MySQL на русские буквы

Воспользуйтесь этими быстрыми рекомендациями, чтобы отобразить русские буквы без знаков вопросов и «крякозябр». Ниже мы привели некоторые уточнения.

  1. Дождитесь выполнения соединения с сервером

  2. Введите запрос:
    set names кодировка

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

    set names utf8

А для Windows-1251 вот так:
set names cp1251

  • Очень часто параметр «Set Names» не помогает решить проблему кодировке при сортировке по имени, хотя буквы отображаются нормально. Как это исправить, читайте далее.

  • Обратите внимание, что запросы «set names» по факту не влияют на кодировку, которая используется функцией mysql_real_escape_string. Поэтому рекомендуется применять установку кодировки через mysql_set_charset() вместо запроса «set names». Но даже если вы проигнорируете эту рекомендацию, то для Uta8 и других однобайтных кодировок ничего плохого не последует.

    Чтобы не задавать кодировку в каждом скрипте, допишите в my.ini
    [mysqld] init-connect='SET NAMES utf8'

    Исправление проблемы кодировки MySQL, если запрос SET NAMES не помог

    Перед тем, как изменить кодировку MySQL, вновь выполните запрос «Set Names», но уже с указанием кодировки таблицы (мы должны её выяснить).

    1. Причина кроется в том, что для таблиц настройка в одной кодировке, а данные в них — в другой.

    2. Попробуйте начать с простого решения — того же запроса «Set Names», но в кодировке таблицы.

    3. Для этого задайте запрос для названия вашей таблицы: show create table `table`

    4. Используйте полученную кодировку в запросе «Set Names»:
      SET NAMES кодировка
      «кодировка» — это параметр, который показал результат запроса «Show Create Table» из пункта 3 (DEFAULT CHARSET=кодировка).

    5. Так вы уберёте «крякозябры» и знаки вопросов из MySQL, настроите правильную отдачу и запись русских букв в данных (главное, чтобы у самой веб-страницы была соответствующая кодировка), но проблему сортировки и поиска пока не решите. Идём дальше.

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

    1. Через mysqldump создайте дамп базы данных.

    2. Используйте эту команду, в которой вместо слова «кодировка» вставьте параметр, выясненный из кодировки таблицы:
      mysqldump -uUSERNAME -pPASSWORD DB_NAME –allow-keywords –create-options –complete-insert –default-character-set=кодировка –add-drop-table > dump.sql

    3. Главное не перепутать кодировку таблиц с кодировкой данных.

    4. Проверьте дамп на правильное отображение кодировки уже в формате данных таблицы, а не самой таблицы, как в пункте 3 (то есть уже не latin1, а utf8, например). Скопируйте бэкап дампа отдельно.

    5. В дампе найдите оператор «Create Database» и проверьте, правильная ли в нём кодировка.

    6. Если нет, то исправьте. Тоже самое можно (и лучше сделать) с оператором «Create Table».

    7. Используйте эту команду для заливки дампа, где «кодировка» — параметр данных таблицы (utf8, а не latin1 из нашего примера):
      mysql -uUSERNAME -pPASSWORD DB_NAME –default-character-set=utf8 < dump.sql

    8. На веб-странице сайта найдите функцию mysql_connect, затем mysql_select_db и ниже их размещения добавьте строчку, где «кодировка» — это параметр данных таблицы, а не самой таблицы:
      mysql_query(“SET NAMES кодировка”)

    Ничего не помогает, проблема кодировки MySQL так и осталась

    Объёмный wiki-раздел по кодировке MySQL составили белорусские коллеги, где вы можете получить исчерпывающее описание процесса правильного создания баз данных и таблиц. Ведь именно в этом процессе кроются все причины возникновения проблемы со знаками вопросов MySQL и «крякозябрами» вместо русских букв.

    • правильная ли задана кодировка при создании таблиц (можно использовать любую, но она должна отражать кодировку данных в таблице);
    • правильная ли кодировка у скрипта, работающего с базой данных (кодировка веб-страницы и скрипта должна быть одной);
    • правильная ли кодировка у самого сайта (у веб-страницы и заголовка «Content-Type» сайта она должна быть общая);
    • в правильной ли кодировке сохраняются данные на веб-странице через редактор (выберите в редакторе нужную кодировку, следите за этим).

    Компания ZEL-Услуги

    Не хотите самостоятельно разбираться в настройке MySQL и оптимизировать работу ИТ-инфраструктуры предприятия? Передайте заботы о программном обеспечении в компанию ИТ-аутсорсинга с полноценным ИТ-аудитом и экспертной поддержкой по любым техническим вопросам и задачам.

    Источник: https://www.zeluslugi.ru/info-czentr/stati/v-mysql-znaki-voprosov

    В mysql знаки вопросов вместо русских букв — решение проблемы с кодировкой

    Вместо текста вопросительные знаки

    Источник: https://zen.yandex.ru/media/zeluslugi/v-mysql-znaki-voprosov-vmesto-russkih-bukv--reshenie-problemy-s-kodirovkoi-5e59184675df9a72abaca440

    Поделиться:
    Нет комментариев

      Добавить комментарий

      Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.