Архив метки: mysql

Неверная кодировка в MySql из PHP. Вопросы вместо слов

Пишу свой первый сайт на PHP с использованием базы данных Mysql и столкнулся со следующей неожиданностью, о которой ниже, а для начала вводные данные:

  • сайт делается в кодировке utf8, о чем указано в заголовке страницы между тегами head:
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  • страница создается в редакторе в кодировке utf8
  • сама база создана с указанием кодировки utf8

При этом получилось так, что при извлечении данных из базы я получал вместо строк с русским текстом знаки вопросов, хотя браузер правильно понимал кодировку.
Решение данной проблемы оказалось простым. Надо после соединения с MySql базой из PHP указать явную кодировку запросом set names utf8
Например, так:

$result = mysql_query ("set names utf8", $link);

где $link — линк на идентификатор соединения с базой (см. mysql_connect())
Всё, теперь данные выводятся в верной кодировке.
Вообще-то эта проблема имеет и другие корни с соответственно другими методами решения. Более подробно о проблемах с кодировками в MySQL можно почитать в следующих источниках:

  1. phpMyadmin по-русски. Очень доходчиво, по полочкам все разложено и в доступной краткой форме.
  2. PHP FAQ. Так же полезная информация, но еще рассказывается что делать если требуется перекодировка данных.
  3. Linux.by wiki pages. А это вообще целый вики на эту тему.