Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: PHP+MySQL: данные возвращаются всегда в юникоде  (Прочитано 1310 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн php-coder

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Здравствуйте!

Ubuntu 9.04
php5-mysql 5.2.6.dfsg.1-3ubuntu4.1
mysql-server-5.1 5.1.31-1ubuntu2

Локаль юникодная, данные в БД в кодировке CP1251. Необходимо, чтобы в скрипте они были тоже в виндовой кодировке. Что не делал -- ничего не выходит -- всё время в юникоде приходят.

Пробовал указывать SET NAMES CP1251 при подключении к БД, пробовал всякие настройки в /etc/mysql/my.cnf -- ничего не помогает :(

Помогите, пожалуйста, решить эту проблему -- ОЧЕНЬ мешает :(

Вот что сейчас в  /etc/mysql/my.cnf относящегося к кодировкам:
[client]
default-character-set = cp1251

[mysqld]
default-character-set = cp1251
collation-server = cp1251_general_ci
init_connect = "SET NAMES cp1251"

Очень надеюсь на вашу помощь. Заранее благодарю!
« Последнее редактирование: 27 Июля 2009, 15:17:58 от php-coder »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
А чем Вам юникод не нравится. Единственное надо добавить в хид
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

и все дела.

Оффлайн php-coder

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
А чем Вам юникод не нравится. Единственное надо добавить в хид
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

и все дела.

У меня с десяток проектов (унаследованных от других программистов) и все они в виндовой кодировке -- начиная от sql-дампов и заканчивая шаблонами страниц, так что для меня ваше предложение неприемлимо -- мне нужно, чтобы они просто работали. (К слову, под Windowsми такой проблемы не возникает.)

Оффлайн pehser

  • Активист
  • *
  • Сообщений: 586
  • sidux 64bit + KDE4 svn
    • Просмотр профиля
    • Магазин електро и бытовой техники в николаеве
А чем Вам юникод не нравится. Единственное надо добавить в хид
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

и все дела.

У меня с десяток проектов (унаследованных от других программистов) и все они в виндовой кодировке -- начиная от sql-дампов и заканчивая шаблонами страниц, так что для меня ваше предложение неприемлимо -- мне нужно, чтобы они просто работали. (К слову, под Windowsми такой проблемы не возникает.)

учи матчасть, даю наводку
php
mysql_query('SET NAMES CP1251');тогда настроки БД трогать не придется
html
<meta http-equiv="Content-Type" content="text/html; charset=cp1251">и настроки апача смотри возможно он выводит всю инфу в utf
« Последнее редактирование: 27 Июля 2009, 14:57:23 от pehser »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Может дело в браузере, а не в ОС ?

Оффлайн php-coder

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
учи матчасть, даю наводку
php
mysql_query('SET NAMES CP1251');тогда настроки БД трогать не придется
Цитировать

Пробовал ещё до того как написать сюда -- не помогает.

<meta http-equiv="Content-Type" content="text/html; charset=cp1251">и настроки апача смотри возможно он выводит всю инфу в utf

По-grep-ал по конфигам -- вроде не он.

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Попробуйте wget -d или wireshark - они покажут, что Вам апач выдает на самом деле.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн php-coder

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Попробуйте wget -d или wireshark - они покажут, что Вам апач выдает на самом деле.

Спасибо. Попробовал:

Content-Type: text/html; charset=windows-1251

Т.е. apache отдаёт контент в правильной кодировке.

Оффлайн pehser

  • Активист
  • *
  • Сообщений: 586
  • sidux 64bit + KDE4 svn
    • Просмотр профиля
    • Магазин електро и бытовой техники в николаеве
обясни у тебя скрипт возрошет текст не в читабельной кодировке или она становится не читабельной после зписи ? и какя кодировка у тебли ну и самой БД

Оффлайн php-coder

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
обясни у тебя скрипт возрошет текст не в читабельной кодировке или она становится не читабельной после зписи ? и какя кодировка у тебли ну и самой БД

Скрипт мне возвращает данные из БД и они все в юникоде. О какой записи вы спрашиваете? У меня юникодная локаль, в БД должна быть CP1251 (так я указывал в PhpMyAdmin, при создании базы, пробовал в консоли создавать -- ничего не меняется).

Оффлайн pehser

  • Активист
  • *
  • Сообщений: 586
  • sidux 64bit + KDE4 svn
    • Просмотр профиля
    • Магазин електро и бытовой техники в николаеве
обясни у тебя скрипт возрошет текст не в читабельной кодировке или она становится не читабельной после зписи ? и какя кодировка у тебли ну и самой БД

Скрипт мне возвращает данные из БД и они все в юникоде. О какой записи вы спрашиваете? У меня юникодная локаль, в БД должна быть CP1251 (так я указывал в PhpMyAdmin, при создании базы, пробовал в консоли создавать -- ничего не меняется).

в скрипте после того как конектишся с БД стоит стока mysql_query('SET NAMES CP1251');?
у меня вот так все ок работает
$this->connid = mysql_pconnect($this->host,$this->user,$this->password);
  if (!$this->connid)
   die('Невозможно соединиться с БД');
  if (!@mysql_select_db($this->dbname))
   die('База данных не найдена');
  mysql_query('SET NAMES CP1251');

Пользователь решил продолжить мысль 27 Июля 2009, 18:19:34:
а ты уверен что у тебя данные в БД в cp1251?
« Последнее редактирование: 27 Июля 2009, 18:19:34 от pehser »

Оффлайн Snus

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Re: PHP+MySQL: данные возвращаются всегда в юникоде
« Ответ #11 : 07 Декабря 2009, 10:09:51 »
Пробуй так:

mysql_connect(HOSTNAME, DBUSNAME, DBUSPASS);
mysql_select_db("DBNAME");
mysql_query ("set names cp1251");
mysql_query ("set collation_connection='cp1251_general_ci'");
« Последнее редактирование: 07 Декабря 2009, 10:13:13 от Snus »

 

Страница сгенерирована за 0.018 секунд. Запросов: 21.