|
|
|
| Мне нужно извлечь из базы данных определенные данные, отправляю запрос, всё выполняется, но русскоязычные данные не определяются, точнее определяются, но в другой кодировке... вот скрипт:
<?php
$location = "localhost";
$username = "root";
$passwd = "";
$dbname = "forum";
$connect = @mysql_connect($location, $username, $passwd);
if(!$connect) { echo("Невозможно подключить базу данных"); }
$select = mysql_select_db($dbname, $connect);
if(!$select) { echo("База данных не выбрана"); }
$query = mysql_query("select * from authors;");
if(!$query) { echo("Запрос не выполнен");}
while($authors = mysql_fetch_array($query, MYSQL_ASSOC))
{
$key = convert_cyr_string($authors['id_name'], "a", "w");
$name = convert_cyr_string($authors['name'], "a", "w");
$family = convert_cyr_string($authors['family'], "a", "w");
echo("$key<br>$name<br>$family<br>");
}
Можно ли без обработке функцией convert_cyr_string(), если да, то как?
?> | |
|
|
|
|
|
|
|
для: Burn-89
(12.01.2007 в 14:00)
| | В какой кодировке хранятся данные в базе данных? | |
|
|
|
|
|
|
|
для: cheops
(12.01.2007 в 14:17)
| | В Windows-1251, не могу понять почему такое происходит и главное, то, что переводить приходится вот так ("a", "w") - тогда нормально отображает в окне браузера... (нашёл путём пробы) | |
|
|
|
|
|
|
|
для: Burn-89
(12.01.2007 в 14:33)
| | a - обозначение страницы cp866, то есть кодировки DOS.
Какая у Вас версия сервера?
Приведите, пожалуйста, дамп структуры таблицы.
А заодно и результат работы запроса
for($res = mysql_query ("SHOW VARIABLES LIKE '%CHARACTER_SET\_%'");
$row = mysql_fetch_row($res); print($row[0].": ".$row[1].'<br/>'));
| после подключения к БД. | |
|
|
|
|
|
|
|
для: Trianon
(12.01.2007 в 15:21)
| | я понимаю, что "а" - это кодировка DOS, версия сервера 5.1, дамп не смогу привести, так как пишу с чужого компа, но в конфиг. файле (помню), что кодировка win-1251 прописана - кодировка MySQL.. Когда из формы вставляю, всё чётко отображается в БД, а наоборот.... | |
|
|
|
|
|
|
|
для: Burn-89
(12.01.2007 в 15:26)
| | > а наоборот....
Пожалуйста, подробнее с этого момента.
А то так и неясно, что у Вас не идет. | |
|
|
|
|
|
|
|
для: Trianon
(12.01.2007 в 15:36)
| | Вообщем пишу скрипт для того, чтобы поместить данные в базу данных, ну допустим база данных форума, мне надо из форм, где вводят $имя и $фамилию всё это вставить, всё хорошо получается, но когда произвожу обратную операцию, тоесть хочу узнать имена посетителей форума, вывожу их в браузер и тут засада (русскоязычные символы в другой кодировке), только после помещения записей базы данных
в массив (ну это понятно) и обработки массива функцией convert_cyr_string($массив['переменная'], "a", "w") - только тогда всё выводится в должном порядке... Хочется сделать проще... сами понимаете не всегда же обрабатывать функцией... | |
|
|
|
|
|
|
|
для: Burn-89
(12.01.2007 в 15:44)
| | Запрос на установку кодировки
mysql_query("SET NAMES 'cp1251'");
| сразу после соединения с сервером выполняете?
Ситуацию,при которой Вы на выходе скрипта получаете текст в DOS я пмогу предположить лишь одну: Изначально таблица в БД была создана и/или заполнена из-под консольного клиента mysql.exe . | |
|
|
|
|
|
|
|
для: Trianon
(12.01.2007 в 15:55)
| | Нет, не выполняю..., но попробую, спасибо... | |
|
|
|
|
|
|
|
для: Trianon
(12.01.2007 в 15:55)
| | А при создании таблицы через консольного клиента с кодировками происходит что-то не то? Зачем тогда его включают в дистрибутив, если он такой кривой? | |
|
|
|
|
|
|
|
для: YellowMouse
(29.03.2007 в 06:17)
| | Почему кривой?
Нормальный. Просто угадывать кодировку базы и клиента не умеет. По умолчанию настроен на западную европу.
В нем тоже можно кодировку задать. Главное - не обознаться. в консольном окне виндовс по умолчанию кодировка другая. У русского - cp866. | |
|
|
|
|
|
|
|
для: Trianon
(29.03.2007 в 09:56)
| | 866-я? В Виндоус же русский кодируется cp1251... | |
|
|
|
|
|
|
|
для: YellowMouse
(29.03.2007 в 11:53)
| | консоль живет не в ANSI-(которая 1251), а в OEM-кодировке (которая как раз 866). Для совместимости со старыми консольными программами.
Впрочем кодировку консоли можно переключить командой chcp . Вот только все диагностики сразу станут нечитабельными...... Jedem des zeihne | |
|
|
|