Проблемы с кодировкой при выводе из базы

krafty

new Exception
Проблемы с кодировкой при выводе из базы

Сразу хочу отметить, что фак читал, по форуму искал, но подходящее решение так и не встретил. У меня в базе кодировка cp1251. Страницы в cp866. Вся киррилица, которая приходит из базы выглядит примерно так:
╨хушёЄЁрЄюЁ√
SET NAMES не помагает.

-~{}~ 01.11.05 09:24:

помагает
convert_cyr_string($text,'w','d')
но это же не дело писать перед каждым выводом!

-~{}~ 01.11.05 09:35:

извините, что ввожу вас в заблуждение.
mysql_query("SET NAMES cp1251") тоже нужно использовать.
Получается, что из базы приходит в 1251. Как же теперь организовать вывод в браузер. Постоянно конвертить неохота.
Преобразовать кодировки в самой базе тоже не выход...
 

Апельсин

Оранжевое создание
Попробуйте поставить character_set_results в cp866. Результат должен возвращаться в cp866 в этом случае.
 

krafty

new Exception
Прошу прощения за неосведомленность.
>Попробуйте поставить character_set_results в cp866
где поставить? это свойство таблицы; при выполнении выборки; на функцию PHP вроде не похоже

-~{}~ 01.11.05 11:02:

народ! где ставить SET character_set_results = cp866? в селекте?
а если писать в базу, то нужно обратно конвертить?
 

Апельсин

Оранжевое создание
> где поставить? это свойство таблицы;

нет, это - переменная, можно поставить как для соединения
так и глобально.

> в селекте?
Причем тут SELECT? Это переменная сервера. Устанавливается: SET variable_name=value;

> а если писать в базу, то нужно обратно конвертить?

вам надо корректно установить переменные, что бы сервер знал в какой кодировке данные приходят и в какой их возвращать. Почитайте про переменные тут:
http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

Почему не изменить кодировку в самой базе и отпадет необходимость в таких извращениях?
 

krafty

new Exception
>Почему не изменить кодировку в самой базе и отпадет необходимость в таких извращениях?
насчет извращений согласен. а если менять кодировку в базе, кириллица теряется?
такой запрос для смены кодировки потянет:
ALTER TABLE `test` DEFAULT CHARACTER SET cp866 COLLATE cp866_general_ci
 

Апельсин

Оранжевое создание
> а если менять кодировку в базе, кириллица теряется?
смотря как менять .. у вас вообще-то обе кодировки кириличные.

> ALTER TABLE `test` DEFAULT CHARACTER SET cp866 COLLATE cp866_general_ci
этот запрос поменяет опцию DEFAULT CHARACTER SET для этой таблицы, сами данные он не трогает.
Если вам данные надо сконвертировать то тогда смотрите в сторону ALTER TABLE .. CONVERT TO CHARACTER SET

У вас сами данные в какой кодировке?

сделайте бэкап таблицы перед ALTER TABLE, just in case.
 

krafty

new Exception
>У вас сами данные в какой кодировке?
cp1251

-~{}~ 01.11.05 12:12:

я так понял, что мне данные нужно именно "сконвертировать". сейчас посмотрю, что случиться с кириллицей:)

-~{}~ 01.11.05 13:08:

Помогло:
ALTER TABLE test CONVERT TO CHARACTER SET cp866
Апельсин, thanks:)
 
Сверху