Это довольно часто возникающий вопрос у начинающих. Причем, если мы говорим о местных сервисах, предоставляющих хостинг, то в первую очередь там реализована поддержка cp1251, и иногда могут проявиться проблемы, если у вас БД использует за базис UTF8, с иностранными хостерами наоборот. На самом деле все решается довольно просто. При каждом коннекте к базе нужно прописывать запрос типа: mysql_query("SET NAMES utf8"); или же mysql_query("SET NAMES ‘cp1251’");, в зависимости от того, что вам нужно. Таким образом, стандартная функция запроса в коде PHP, например, должна выглядеть так…
function get_article($id)
{
db_connect();//ф-я подключения к БД
mysql_query("SET NAMES utf8");
$query = ("SELECT * FROM articles WHERE id='$id' ");
$result = mysql_query($query);
$row = mysql_fetch_array($result);
return $row;
}
В случае, когда данный вариант не поможет, можно использовать строки, например, для случая с переходом на cp1251:
mysql_query("SET NAMES 'cp1251'");
mysql_query("SET CHARACTER SET 'cp1251'");
Если у вас есть доступ к файлу конфигурации MySQL на сервере, то запросы, организованные таким образом являются излишними. Достаточно указать базовую кодировку в конфигурационном файле my.cnf. В разделе [mysqld] вводим:
default-character-set=cp1251
character-set-server=cp1251
collation-server=cp1251_general_ci
init-connect=»SET NAMES cp1251?
skip-character-set-client-handshake
А в раздел [mysqldump] прописываем строку:
default-character-set=cp1251
Комментарии
Автор забыл напомнить, что надо обязательно перекодировать все уже созданные до этого в базе таблицы, иначе потом на сайте чёрт ногу сломит.
Большое спасибо, это сработало:
mysql_query("SET NAMES 'cp1251'");