Вопросы вместо русских букв в браузере
2 Ответ от Hanut 2009-05-05 14:09:31
Не здесь ли собака покопалась.
Различие версий настораживает. К сожалению утвердительно говорить, что это причина, я не могу.
В какой кодировке страницы сайта?
В какой кодировке таблицы в БД?
3 Ответ от jeck111 2009-05-05 14:51:15
сделал запрос, и показываю вывод:
на локалке:
Variable_name Value
character_set_client latin1
character_set_connection latin1
character_set_database latin1
character_set_results latin1
character_set_server latin1
character_set_system utf8
character_sets_dir C:\Program Files\MySQL\MySQL Server 4.1\share\charsets/
на удаленном сервере:
Variable_name Value
character_set_client cp1251
character_set_connection cp1251
character_set_database cp1251
character_set_filesystem binary
character_set_results cp1251
character_set_server cp1251
character_set_system utf8
character_sets_dir /usr/local/share/mysql/charsets/
вижу что совпадений почти нет, и сразу вопрос где это можно поменять?
В какой кодировке страницы сайта?
В какой кодировке таблицы в БД?
Вот здесь я не уверен что правильно понимаю о чем Вы спрашиваете, поэтому пишу все:
Таблицы: тип: MyISAM сравнение: cp1251_general_ci
и вот это на домашней странице pma:
MySQL-кодировка: UTF-8 Unicode (utf8)
Сопоставление соединения с MySQL: UTF-8_Unicode_ci
4 Ответ от Hanut 2009-05-05 15:14:30
jeck111
На локальном сервере в конфигурационном файле MySQL (my.ini) внесите следующие изменения:
5 Ответ от jeck111 2009-05-05 15:30:27
сделал, перезапустил mysql, apache (на всякий случай), результата не дало, все теже знаки вопроса.
6 Ответ от Hanut 2009-05-05 18:07:55
7 Ответ от jeck111 2009-05-05 18:24:02
Variable_name Value
character_set_client cp1251
character_set_connection cp1251
character_set_database cp1251
character_set_results cp1251
character_set_server cp1251
character_set_system utf8
character_sets_dir C:\Program Files\MySQL\MySQL Server 4.1\share\charsets/
8 Ответ от jeck111 2009-05-05 18:31:43
еще заметил одно различие между локалкой и удаленным:
Таблица Действие Записи Тип Сравнение Размер Фрагментировано
локал:
Таблиц: 10 Всего 370 InnoDB cp1251_general_ci 208.9 КБ 0 Байт
удаленный:
Таблиц: 10 Всего 370 MyISAM cp1251_general_ci 234.3 КБ 3.0 КБ
это нижняя строка, которая жирным выделена в закладке "Структура", хотя напротив самих таблиц и там и там стоит MyISAM
ЗЫ. Просто подумал, может это будет полезно.
9 Ответ от Hanut 2009-05-05 19:48:51
jeck111
Если вместо данных выводятся вопросики - значит в БД данные не должны быть в читаемом виде. Еще раз: в phpMyAdmin вы должны видеть кириллицу, а не вопросики или крякозябы, как на удаленном, так и на локальном сервере.
Нижняя строка означает изначальный тип создаваемых таблиц. Если вы хотите, чтобы и на локальном сервере все создаваемые таблицы имели тип MyISAM, поправьте в my.ini строку:
В данном случае, это не существенно, так как импортируемый дамп имеет прописанную кодировку для каждой таблицы.
10 Ответ от jeck111 2009-05-05 22:12:48
Спасибо за содействие, вопрос решен:
после коннекта к базе, и перед всеми запросами вставил код:
Возможно вопрос был задан не на том форуме, ну все равно спасибо Hanut за помощь.
11 Ответ от mayerz 2009-11-22 16:49:46
Добрый день. У меня похожая проблема такчто не хочу создавать отдельный топик.
После обновления движка DLE вся кирилица стала отображатся знаками вопросов, при чем как в самой бд так и на сайте. Пробовал менять кодировку через пма на cp1251_general_ci, вроде отображается что все поменялось но при просмотре данных всеравно ". "
Уже даже не знаю что еще пробовать.
character_set_client latin1
character_set_connection latin1
character_set_database latin1
character_set_filesystem binary
character_set_results latin1
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
12 Ответ от Hanut 2009-11-22 17:27:54
mayerz
Посмотрите как кириллица выглядит в phpMyAdmin, если там будут вопросики, то данные уже не вернуть, если крякозябы, то надо сделать дамп и попробовать его перекодировать. Если будете заниматься перекодировкой, то создайте отдельную ветку для обсуждения, постараемся помочь.
Менять сравнение на таблицах в phpMyAdmin не надо.
13 Ответ от Feniksss 2009-11-27 09:09:06 (изменено: Feniksss, 2009-11-27 09:10:12)
Причём при проверке кодировки базы данных(show variables like "character_set_database";), и таблицы(show create table `table`) выводит: utf8
ENGINE=MyISAM DEFAULT CHARSET=utf8
И кодировка каждого поля тоже utf8_unicode_ci
Вот. не знаю в чём проблема. перекодировать базу данных мне не надо, мне надо создать таблицу, и вставлять в неё поля на кириллице, но этого не получается, в браузере пишет вопросы, а в PMA всё нормально отображается.
Да, в PMA кодировки все стоят utf8_unicode_ci.
14 Ответ от Hanut 2009-11-27 13:48:07
Feniksss
Вы все правильно сделали, только скрипты (кроме phpMyAdmin) нельзя подключать под root, для них создайте отдельного пользователя и назначьте ему только необходимые права (не выставляйте права из раздела "Администрирование").
Начал переводить сайт на русский, но возникла проблема - вопросы вместо русских букв стало показывать. Проблема связана, думаю, с mysql, так как внутри сайта вопросы появляются вместо букв, только когда с базы данные. В базе поставил utf-8_bin, тоже не помогло. В чем может быть проблема?
1) для Apache в .htaccess:
2) для nginx в конфиге:
3) в html-документе:
4) необходимо все сущности (таблицы) установить в кодировку utf8_general_ci
5) если используете PDO:
6) если всё ещё пользуетесь процедурным доступом к БД, то:
7) в Вашем редакторе/IDE сохраняйте файл в кодировке utf8
Если не разберетесь с кодировкой из базы, то можете на невысоконагруженном проекте, например, конвертировать iconv налету все переменные.
Обновление
где-то как-то так:
$in - строка в любой кодировке
$out - строка в utf-8
Проблема, скорее всего, в кодировке HTML редактора, которым вы пользуетесь. Редактор может выставлять кодировку записанного файла в соответствии с языковой версией Windows. Например, на английской версии редактор может записывать в ANSI, чего не понимается браузерами.
Решение: Кодировка HTML страницы должна совпадать с кодировкой указанной в HTML тэгом. Для универсальной UTF-8 которая сегодня используется по умолчанию в большинстве блогах и т.п. HTML страница начинается с тэгов типа
Тогда текстовый редактор должен записывывать в UTF8:
В HTML редакторе настройка может быть во время Save а может где-то в Settings а может вообще не быть.
Подобные проблемы обычно связаны с несовпадением кодировки сайта и веб-браузера. Например, в документе мы четко указали, что сайт использует кодировку UTF-8, однако браузер думает, что кодировка нашего сайта Windows-1251. В конечном результате мы видим вместо текста различные, так называемые, кракозябры и вопросительные знаки. Но у каждой проблемы есть источник возникновения, и конечно же, должно быть и решение проблемы.
Проблемы с кодировкой сайта: Невнимательность.
Источник:
Самым банальным источником проблемы часто является невнимательность вебмастера. Который по то или иной причине прописал в неправильной форме кодировку документа. Вследствие чего возникают проблемы.
Решение:
Решение данного недоразумения вполне простое. Будьте внимательны и прописывайте кодировку документа правильно. Как это сделать я рассказывал в этой статье.
Вместо букв кракозябры: Ошибка.
Источник:
В данном случае проблема также может возникнуть из-за невнимательности или неопытности. Заключается проблема в том, что вроде бы мета тег прописан правильно в документе, но при сохранении, по какой-то причине документ был сохранен не в той кодировке, которая указана. То есть, например, мы пишем документ в UTF-8, о чем сразу указали, с помощью мета тега, но при сохранении или создании документа забыли выставить кодировку UTF-8, и она осталась по умолчанию Windows-1251. И естественно вместо текста в браузере мы увидим кракозябры.
Решение:
Не забывайте сразу, при создании документа указывать верную кодировку. Или же преобразовывайте документ в правильную кодировку, при сохранении. О том, как это сделать, мы также уже говорили ранее, в этой статье.
Вопросительные знаки вместо букв: Задать кодировку в htaccess.
Источник:
Бывают случаи (не часто), когда мы правильно прописываем кодировку документа и сохраняем в правильной кодировке, которая совпадает с указанной. Но в браузере все равно видим различные вопросительные знаки, иероглифы или кракозябры. В данном случае вина может лежать на используемом хостинге. Возможно, кодировка, указанная на сервере не совпадает с кодировкой, в которой написан код нашего сайта.
Решение:
В данном случае мы можем задать кодировку сервера самостоятельно, с помощью файла htaccess. Для этого, открываем файл htaccess, в нужной папке сайта. Если нет, то создаем. И добавим в самый конец строку в зависимости от кодировки, используемой на сайте.
Windows-1251:
Слышал, еще бывают проблемы с кодировкой базы данных, но сам не сталкивался, поэтому и рассказать ничего не могу.
Надеюсь, хотя бы один из этих способов сможет помочь решить проблемы с кодировкой сайта. А у меня на этом все.
При переносе дампа или после нескольких манипуляций в базе неожиданно появились знаки вопросов в MySQL вместо русских букв? Это известная и распространённая проблема в MySQL старших версий.
🟥 Это руководство поможет предпринять быстрые шаги в исправлении ситуации.
Мы рассмотрим конкретные действия для быстрого решения. Обратите внимание на официальное руководство по кодировке в MySQL, чтобы вы смогли разбираться в сути и выполнять рекомендации осознанно.
Исправляем знаки вопросов в MySQL на русские буквы
Воспользуйтесь этими быстрыми рекомендациями, чтобы отобразить русские буквы без знаков вопросов и «крякозябр». Ниже мы привели некоторые уточнения.
- Дождитесь выполнения соединения с сервером
- Введите запрос:
set names кодировка
«кодировка» — это параметр кодировки, в которой вы выводите данные страницы на сайте.
То есть запрос для UTF-8 должен выглядеть так:
set names utf8
Обратите внимание, что запросы «set names» по факту не влияют на кодировку, которая используется функцией mysql_real_escape_string . Поэтому рекомендуется применять установку кодировки через mysql_set_charset() вместо запроса «set names» . Но даже если вы проигнорируете эту рекомендацию, то для Uta8 и других однобайтных кодировок ничего плохого не последует.
Исправление проблемы кодировки MySQL, если запрос SET NAMES не помог
Перед тем, как изменить кодировку MySQL, вновь выполните запрос «Set Names», но уже с указанием кодировки таблицы (мы должны её выяснить).
- Причина кроется в том, что для таблиц настройка в одной кодировке, а данные в них — в другой.
- Попробуйте начать с простого решения — того же запроса «Set Names», но в кодировке таблицы.
- Для этого задайте запрос для названия вашей таблицы:
show create table `table` - Используйте полученную кодировку в запросе «Set Names»:
SET NAMES кодировка
«кодировка» — это параметр, который показал результат запроса « Show Create Table » из пункта 3 ( DEFAULT CHARSET=кодировка ). - Так вы уберёте «крякозябры» и знаки вопросов из MySQL, настроите правильную отдачу и запись русских букв в данных (главное, чтобы у самой веб-страницы была соответствующая кодировка), но проблему сортировки и поиска пока не решите. Идём дальше.
Теперь, зная кодировку таблицы (например, latin1 ) и имея данные в той же кодировке, мы должны изменить фактическую кодировку данных.
- Через mysqldump создайте дамп базы данных.
- Используйте эту команду, в которой вместо слова «кодировка» вставьте параметр, выясненный из кодировки таблицы:
mysqldump -uUSERNAME -pPASSWORD DB_NAME --allow-keywords --create-options --complete-insert --default-character-set=кодировка --add-drop-table > dump.sql - Главное не перепутать кодировку таблиц с кодировкой данных.
- Проверьте дамп на правильное отображение кодировки уже в формате данных таблицы, а не самой таблицы, как в пункте 3 (то есть уже не l atin1 , а utf8 , например). Скопируйте бэкап дампа отдельно.
- В дампе найдите оператор «Create Database» и проверьте, правильная ли в нём кодировка.
- Если нет, то исправьте. Тоже самое можно (и лучше сделать) с оператором «Create Table».
- Используйте эту команду для заливки дампа, где «кодировка» — параметр данных таблицы ( utf8 , а не latin1 из нашего примера):
mysql -uUSERNAME -pPASSWORD DB_NAME --default-character-set=utf8 < dump.sql - На веб-странице сайта найдите функцию mysql_connect , затем mysql_select_db и ниже их размещения добавьте строчку, где «кодировка» — это параметр данных таблицы, а не самой таблицы:
mysql_query("SET NAMES кодировка")
Ничего не помогает, проблема кодировки MySQL так и осталась
Объёмный wiki-раздел по кодировке MySQL составили белорусские коллеги, где вы можете получить исчерпывающее описание процесса правильного создания баз данных и таблиц. Ведь именно в этом процессе кроются все причины возникновения проблемы со знаками вопросов MySQL и «крякозябрами» вместо русских букв.
Также обратите внимание и на эти моменты при работе с базами данных
- правильная ли задана кодировка при создании таблиц (можно использовать любую, но она должна отражать кодировку данных в таблице);
- правильная ли кодировка у скрипта, работающего с базой данных (кодировка веб-страницы и скрипта должна быть одной);
- правильная ли кодировка у самого сайта (у веб-страницы и заголовка «Content-Type» сайта она должна быть общая);
- в правильной ли кодировке сохраняются данные на веб-странице через редактор (выберите в редакторе нужную кодировку, следите за этим).
Не хотите самостоятельно разбираться в настройке MySQL и оптимизировать работу ИТ-инфраструктуры предприятия?
Передайте заботы о программном обеспечении в компанию ИТ-аутсорсинга ZEL-Услуги с полноценным ИТ-аудитом и экспертной поддержкой по любым техническим вопросам и задачам.
Читайте также: