Информация из базы данных выводятся в виде «?????», но в базе данных всё отображается верно

Материал из Friendhosting
Перейти к навигации Перейти к поиску

Иногда при переносе сайтов от других хостеров возникают проблемы из-за несовпадения кодировок между данными хранящимися в базе данных MySql и данными хранящимися в теле дизайна сайта. Таким образом, может возникнуть ситуация, когда на одной странице будут данные в двух кодировках.

Есть два решения данной проблемы:
1. Изменить кодировку в базе данных на ту, которая используется при передаче данных на страницах сайта. То есть, если у вас база в кодировке utf8 а сайт использует кодировку windows-1251, то базе необходимо изменить кодировку на cp1251.
2. Можно установить явные настройки кодировки при подключении к базе, выполнении выборки и записи в базу данных. Для этого после подключения к базе прописываем следующие строки:

@mysql_query("SET NAMES cp1251");
@mysql_query("SET CHARACTER SET cp1251");
@mysql_query("SET character_set_client = cp1251");
@mysql_query("SET character_set_connection = cp1251");
@mysql_query("SET character_set_results = cp1251");

Что это даст. Первые две строчки будут считывать с базы не «?????» а нормальный текст. Следующие строчки дадут возможность записывать в базу текст, а не «?????».

Пример:
Файл настройки подключения к БД до изменений был таким:

$db = mysql_connect ("localhost","user","passwd");
mysql_select_db("bazadannyh",$db);

После изменений он будет выглядеть так.

$db = mysql_connect ("localhost","user","passwd");
@mysql_query("SET NAMES cp1251");
@mysql_query("SET CHARACTER SET cp1251");
@mysql_query("SET character_set_client = cp1251");
@mysql_query("SET character_set_connection = cp1251");
@mysql_query("SET character_set_results = cp1251");
mysql_select_db("bazadannyh",$db);

Оба вариант имеют право на жизнь, но мы вам рекомендуем первый способ решения проблемы.