akazakou
Знаток
(269)
15 лет назад
Вопросики появляются, если кодировка таблицы не совпадает c кодировкой клиента.
Соответственно, в MySQL появились две новые команды set character_set_client и set character_set_results
Первая указывает, в какой кодировке приходят данные в базу, а вторая - в какой их выдавать. Поскольку чаще всего эти кодировки совпадают, то можно писать короче - один запрос "SET NAMES кодировка", который и устанавливает оба эти параметра.
В вашем коде я вижу комментированную строку с нужной командой SET NAMES. вот ее вам нужно выполнить 1 раз пред выполнением всех остальных запросов. Эта команда даст знать серверу, сто с вашим потоком данных, нужно будет производить манипуляции по перекодировке данных в необходимую вам кодировку.
Пробовал менять кодировки - не помогает.
Есть выход - при соединении к БД использовать запрос "SET NAMES 'cp1251' ". Но неужели он единственный и после каждого соединения из PHP с MySQL нужно его использовать?
Код программы:
$Connection = mysql_connect("localhost", "root", "Password");
mysql_select_db("mydb", $Connection);
//$sql = "SET NAMES 'cp1251'";
//mysql_query($sql, $Connection);
$Result = mysql_query("SELECT * FROM Topics where SubTopic = 0 order by N",
$Connection);
while ($Row = mysql_fetch_array($Result))
{echo " ".$Row["TopicName"]."";
}
Я закоментировал это обращение к MySQL.
Вместо $Row["TopicName"] выдяёт знаки вопросов (в БД там строка на кириллице).
Вопрос: Можно ли обойтись без SET NAMES?
Заранее спасибо!