Задать вопрос
MrHamster
@MrHamster
Веб-программист, графический дизайнер

Как выбрать кодировку, в которой будет возвращать строки MySQL?

Написал простенькую страницу сегодня, подгружающую из SQL строки. На локалке все работает, но когда перенес на хостинг - SQL стала возвращать вместо UTF-8 строк ASCII строки => все русские символы стали "?".
<?php

include('configuration.php');

function sql_connect() {
    global $SQL_ADDRESS, $SQL_LOGIN, $SQL_PASSWORD, $SQL_BASE_NAME;
    mysql_connect($SQL_ADDRESS, $SQL_LOGIN, $SQL_PASSWORD) or die(mysql_error());
    mysql_select_db($SQL_BASE_NAME) or die(mysql_error());
    mysql_query("SET CHARACTER SET 'utf-8'");
    mysql_query("SET NAMES 'utf-8'");
    mysql_query("SET SESSION collation_connection = 'utf8_general_ci';");
};


sql_connect();
$query = 'SHOW VARIABLES LIKE "character_set_database"';
$result = mysql_query($query);
$r = mysql_fetch_array($result);
echo $r[1];
echo mb_detect_encoding($r[1]);
echo 'Русский пашет?';
?>


Этот код выдает следующее - utf8ASCIIРусский пашет?.
То есть кодировка БД - utf-8, сайт utf-8, но строки возвращаются в ASCII.
Стоит добавить, что все записи в БД отображаются нормально.
Если что-то совсем глупое - не ругайтесь:3
  • Вопрос задан
  • 733 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 3
@vista1x
Вы создали БД сразу в кодировке UTF-8, или создали и потом поменяли кодировку? Может быть такое, что у выводимых вами полей кодировка как раз cp1251, в то время как сама БД в UTF-8. Зайдите в редактирование полей таблицы, там указана кодировку для каждого из полей.
Ответ написан
trevoga_su
@trevoga_su
phpfaq.ru/charset - ОЧЕНЬ полезная ссылка

есть кодировка базы, кодировка таблицы и кодировка строки, грубо говоря, и то что называется collation
все должно быть в UTF, вызов mysql_set_charset() вместо трех запросов как у вас,
ну и сам скрипт в UTF-8 без BOM
Ответ написан
Комментировать
MrHamster
@MrHamster Автор вопроса
Веб-программист, графический дизайнер
vista1x, trevoga_su
Окей. Это самый большой фейл за последнее время. Все, что нужно было сделать - это правильно написать кодировку.
// == Это неправильно ==
mysql_query("SET CHARACTER SET 'utf-8'");
mysql_query("SET NAMES 'utf-8'");

// == Это правильно ==
mysql_query("SET CHARACTER SET 'utf8'");
mysql_query("SET NAMES 'utf8'");

Спасибо за попытки помочь)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы