Вопросы вместо русских букв

Знаки вопросов в 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

    Кракозябры и знаки вопроса или неверная кодировка

    Вопросы вместо русских букв
    Да-да. Как это ни печально, в эру UNICODE у меня снова всталвопрос с кракозябрами или знаками вопроса вместо русских букв.

    Обнаружилось, что все мои программы с русскоязычным интерфейсрм, написанные на Delphi 7, при отображении их в англоязычных операционных системах вместо русских букв отображают знаки вопроса.

    Скажу сразу, перевод проектов под UNICODE-совместимую версию Дельфи (2009 или 2010) практически не представляется возможным, поскольку в этих проектах использованы компоненты, не имеющие новых UNICODE-совместимых версий (поддержка компонентов авторами больше не осуществляется).

    Странно не то, что интерфейс программ не отображает русских букв, а то, что вместо ожидаемых кракозябр отображаются знаки вопроса.

    Кракозябры – это не что иное, как символы текущей кодировки, имеющие коды, совпадающие с кодами русских букв в русской кодировке, и их появление вполне ожидаемо.

    Знаки вопроса же обычно возникают в том случае, когда система не может сопоставить использованный национальный символ UNICODE (например, русскую букву из UNICODE) с символом текущей кодировки (например, 1252, где похожих символов просто нет).

    Но у меня Юникодом и не пахнет нигде, у меня в интерфейсе изначально идёт кодировка 1251, которая в англоязычной кодировке 1252 должна отображаться кракозябрами! Очевидно, где-то в операционной системе происходит двойное преобразование по цепочке 1251 – UNICODE – 1252.

    Операционная система Windows XP, Windows Vista и Windows 7 имеют специальную настройку локалей. Располагается она на Панели Управления, и называется “Язык и национальные стандарты”. Там, на последней вкладке (вкладка “Дополнительно”) можно выбрать язык для программ, не поддерживающих Юникод.

    По идее, после установки там русского языка, программа должна отображать русские буквы правильно. На деле же происходит отображение русских букв только в шапке программы и в компонентах ColorBox. Во всех остальных компонентах интерфейса остаются знаки вопроса.

    Удивительно, но проблему решает совершенно другая настройка, а именно “Региональные параметры” (первая вкладка окна “Язык и региональные параметры”). Вообще-то эта вкладка отвечает за форматы выводимых чисел, денежных единиц, даты и времени, и какое отношение она имеет к кодировкам – непонятно.

    Тем не менее, если установить на ней значение “Русский (Россия)”, знаки вопроса пропадают, и система начинает вести себя так, как положено, то есть интерфейс программы начинает отображать либо кракозябры, либо русские буквы в зависимости от настройки локали на вкладке “Дополнительно”.

    Вот такие результаты дают разные комбинации этих двух настроек в любой версии операционной системе Windows, начиная с версии Windows XP:

    Формат: США Локаль: СШАРезультат: Везде знаки вопроса Формат: США Локаль: РоссияРезультат: Везде знаки вопроса, кроме шапки и колорбоксов, в которых отображаются русские символы Формат: Россия Локаль: СШАРезультат: Везде “кракозябры” Формат: Россия Локаль: РоссияРезультат: Всё ОК! Резюмируя вышесказанное, формулирую следующие непонятные мне вопросы:

    1. Почему на англоязычных компьютерах в интерфейсе русскоязычных программ, использующих однобайтовую кодировку, вместо кракозябр возникают знаки вопроса? Появляются ли они из-за возникновения цепочки преобразований 1251 – UNICODE – 1252, и если да, то почему, и как этого избежать?
    2. Почему при переключении локали на последней вкладке, знаки вопроса превращаются в русские символы только в шапке программы и в компоненте ColorBox? В чём разница между этими и всеми остальным компонентами?
    3. Почему на появление знаков вопроса влияет первая вкладка, отвечающая за формат выводимых чисел и дат? Можно ли решить вопрос, оставив формат отображения чисел и дат англоязычным, без нудной подгонки русского формата под англоязычный в дополнительных настройках?

    Повторюсь, что вышеописанное касается всех версий Windows, начиная с версии Windows XP. Это наводит на мысль, что операционные системы работают правильно, и я просто чего-то недогоняю.

    P.S.: Я выявил все форматы, при которых кириллица отображается нормально:Азербайджанский (кириллица)Амхарский (Эфиопия)Армянский (Армения)Ассамский (Индия)Башкирский (Россия)Белорусский (Беларусь)Бенгальский (Бангладеш)Бенгальский (Индия)Болгарский (Болгария)Боснийский (кириллица)Грузинский (Грузия)Гуджарати (Индия)Дивихай (Мальдивы)Инуктитут (слоговое письмо, Канада)Казахский (Казахстан)Каннада (Индия)Киргизский (Киргизстан)Конкани (Индия)Кхмерский (Комбоджа)Лаосский (ЛНДР)Македонский (БЮР Македония)Малаялам (Индия)Мальтийский (Мальта)Маори (Новая Зеландия)Маратхи (Индия)Монгольский (традиционный монгольский, КНР)Монгольский (кириллица, Монголия)Непальский (Непал)Ория (Индия)Панджаби (Индия)Пашто (Афганистан)Русский (Россия)Санскрит (Индия)Сербский (кириллица)Сингальский (Шри-Ланка)Сирийский (Сирия)Таджикский (кириллица, Таджикистан)Тамильский (Индия)Татарский (Россия)Телугу (Индия)Тибетский (КНР)Узбекский (кириллица, Узбекистан)Украинский (Украина)Хинди (Индия)Юи (КНР)Якутский (Россия)

    Во всех остальных форматах, коих намного больше, возникают знаки вопроса. Отсюда дополнительный вопрос, что общего с точки зрения настроек операционной системы между всеми этими языками?

    Кстати, 4 формата дали ещё один интересный результат:Китайский (упрощённое письмо, КНР) и Китайский (упрощённое письмо, Сингапур) дали знаки параграфа §, чередующиеся с символами кириллицы.Корейский (Корея) дал знаки ¬ чередующиеся с символами кириллицы.Японский (Япония) дали знаки ˷ чередующиеся с символами кириллицы.

    Так что вот дополнительная пища для размышлений.

    Источник: https://novikovmaxim.livejournal.com/135472.html

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

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

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