Как настроить правильно кодировку для MySQL?

elenavictory

Вот... Изучаю PHP. Дошла до соединения с БД. И тут такая проблема.

В файле *.php прописываю соединение с БД. Затем прописываю запросы, вывожу результаты на экран.

Все работает. Ошибок не выдает. НО! Проблема: русский текст не распознается. Выводит знаки ??? При этом английские буквы нормально выводит.

Так понимаю, что проблемы с кодировкой. Кодировку меняла и в самом php-файле, и в БД. На windows-1251 и на utf-8 и utf8_general_ci.

Видимо я пишу по старой версии PHP, и для PHP 5.х этот метод не подходит. Но я учусь по книжке, там так написано...

В сети нашла решение моей проблемы.

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

Код, который писала по книге такой:

Только просьба ко всем большая. Давайте не будем тут разговаривать на тему, зачем девушке программирование. Уже общались по этому вопросу. Изучаю - значит надо. Спасибо за понимание:)

3 ответа

elenavictory

// Подключение
mysql_connect("localhost","user","pass");
mysql_select_db("db");
mysql_set_charset("utf8")

либо если используется mysqli

$mysqli = new mysqli("localhost", "user", "pass", "bd");
$mysqli->set_charset("utf8")

// Дальше работа с базой

При создании базы так же использовать кодировку utf8_general_ci, либо перевести в нее текущию. Так же ставте заголовок charset=UTF-8 и переводите кодировку самого файла (где пишите код и вообще все файлы) в кодировку UTF-8.

После понимания синтаксиса советую все делать в mysqli(нежели mysql) т.к. удобнее, есть поддержка, ну и ООП естественно, но это уже потом узнаете) Удачи.


elenavictory

Возьмите за правило писать в кодировке UTF-8.

  • Сохраните свои скрипты в кодировке utf-8
  • Отдавайте заголовки, что вы скрипт генерит контент в utf-8
  • После успешного соединения с БД выполните сразу же такой запрос: 'SET NAMES utf8';

использую перечисленные выше принципы, и проблемы с кодировкой нет.


elenavictory

Ну вот "по-новому" написанный код:

<title>Соединение с БД MySQL</title>




<!--?php

$link = mysqli_connect('localhost', 'one', '12345', 'firstbd');

if (mysqli_connect_errno()) {
    echo("Не удалось подключиться: %s\n", mysqli_connect_error());
    exit();
}

if (!mysqli_set_charset($link, "utf8")) {
    echo("Ошибка при загрузке набора символов utf8: %s\n", mysqli_error($link));
} else {
    echo("Текущий набор символов: %s\n", mysqli_character_set_name($link));
}

if ($result = mysqli_query($link, "SELECT * FROM firma")) {
    echo("<br-->Select вернул %d строк.\n", mysqli_num_rows($result));

$myrow = $result->fetch_array(MYSQLI_ASSOC);

  echo "".$myrow['name'];
  echo "".$myrow['surname'];

    mysqli_free_result($result);
}

mysqli_close($link);

?>

Сейчас уже не выходит никаких ошибок.

На скрине показано, что получается в результате.

Еще, в самом начале в meta у меня прописано windows-1251. Если меняю на utf-8, то вообще все выходит кракозябрами. Это как можно изменить?

licensed under cc by-sa 3.0 with attribution.