Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Кодировка. Ужос:(
 
 автор: Poison   (07.08.2007 в 20:54)   письмо автору
 
 

Есть Icq-Bot недавно перевел его на новый хост... вот тут и началось=)
Запустил я его, из БД (уже как стандарт) идут вопросы вместо кирилицы ( и главное не всегда :) то нормально то нет:( Полдня промучаясь понял что продлема с кодировкой наступает после реконнекта с БД

<%
        if  ( !is_resource( $this->db_id ) || !mysql_ping( $this->db_id ) ) {
            $this->Disconnect();
            if ( !$this->Connect( $error ) ) {
                return false;
            }
        }


В методе $this->Connect() стоит запрос

<%
mysql_query( "SET NAMES 'cp1251'", $this->db_id );


Но он работает только один раз:( почему так происходит? может кто сталкивался с моей проблемой?

ЗЫ Как можно проверить есть соединение с БД?

   
 
 автор: Poison   (08.08.2007 в 22:19)   письмо автору
 
   для: Poison   (07.08.2007 в 20:54)
 

-

   
 
 автор: Trianon   (08.08.2007 в 22:29)   письмо автору
 
   для: Poison   (08.08.2007 в 22:19)
 

А что выдает запрос

SHOW VARIABLES LIKE 'CHARACTER_SET\_%'
после перезапуска?

   
 
 автор: Poison   (08.08.2007 в 22:52)   письмо автору
 
   для: Trianon   (08.08.2007 в 22:29)
 

Да проблема на лицо=)

До:


-----
Array
(
    [Variable_name] => character_set_client
    [Value] => cp1251
)
Array
(
    [Variable_name] => character_set_connection
    [Value] => cp1251
)
Array
(
    [Variable_name] => character_set_database
    [Value] => latin1
)
Array
(
    [Variable_name] => character_set_results
    [Value] => cp1251
)
Array
(
    [Variable_name] => character_set_server
    [Value] => latin1
)
Array
(
    [Variable_name] => character_set_system
    [Value] => utf8
)

-----


После:


-----
Array
(
    [Variable_name] => character_set_client
    [Value] => latin1
)
Array
(
    [Variable_name] => character_set_connection
    [Value] => latin1
)
Array
(
    [Variable_name] => character_set_database
    [Value] => latin1
)
Array
(
    [Variable_name] => character_set_results
    [Value] => latin1
)
Array
(
    [Variable_name] => character_set_server
    [Value] => latin1
)
Array
(
    [Variable_name] => character_set_system
    [Value] => utf8
)

-----


Как теперь с этим бороться? если даже SET NAMES непомогает...

   
 
 автор: Trianon   (08.08.2007 в 22:56)   письмо автору
 
   для: Poison   (08.08.2007 в 22:52)
 

А если не одним, а независимыми запросами поставить
SET CHARACTER SET CLIENT = 'utf8';
SET CHARACTER SET RESULTS = 'utf8';
SET CHARACTER SET DATABASE

СТОП!!!
А mysql_select_db() Вы повторно вызываете?!

   
 
 автор: Poison   (08.08.2007 в 23:17)   письмо автору
 
   для: Trianon   (08.08.2007 в 22:56)
 

А если не одним, а независимыми запросами поставить
SET CHARACTER SET CLIENT = 'utf8';
SET CHARACTER SET RESULTS = 'utf8';
SET CHARACTER SET DATABASE


Попробую.

А mysql_select_db() Вы повторно вызываете?!

Да конечно, при перепоключении вызываеться такой вот метод:

<%
    public function Connect($error = true) {
        if ( ! $this->db_id = @ mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword ) ) {
            if ( $error ) {
                $this->Error(mysql_error(), mysql_errno());
            }
            return false;
        }
        if ( ! mysql_select_db( $this->dbname, $this->db_id ) ) {
            if ( $error ) {
                $this->Error(mysql_error(), mysql_errno());
            }
            return false;
        }
        mysql_query( "SET NAMES 'cp1251'", $this->db_id );
        return true;
    }

   
 
 автор: Poison   (09.08.2007 в 08:55)   письмо автору
 
   для: Trianon   (08.08.2007 в 22:56)
 

Пробывал:

<?
mysql_query
"SET CHARACTER SET CLIENT = 'cp1251'"$this->db_id );
mysql_query"SET CHARACTER SET RESULTS = 'cp1251'"$this->db_id );
mysql_query"SET CHARACTER SET DATABASE"$this->db_id );


Даже при первом подключении latin1:(

   
 
 автор: Trianon   (09.08.2007 в 09:14)   письмо автору
 
   для: Poison   (09.08.2007 в 08:55)
 


mysql_query( "SET CHARACTER_SET_CLIENT = 'cp1251'", $this->db_id ); 
mysql_query( "SET CHARACTER_SET_RESULTS = 'cp1251'", $this->db_id ); 
mysql_query( "SET CHARACTER_SET_CONNECTION = 'cp1251'", $this->db_id ); 
mysql_query( "SET CHARACTER_SET_DATABASE = 'cp1251'", $this->db_id ); 

   
 
 автор: Poison   (09.08.2007 в 09:23)   письмо автору
 
   для: Trianon   (09.08.2007 в 09:14)
 

При переподключении все равно меняеться на latin1:((((
Млин как-же надоела эта кодировка:(((

   
 
 автор: Poison   (09.08.2007 в 09:27)   письмо автору
 
   для: Poison   (09.08.2007 в 09:23)
 

Немогу понять почему так происходит, ведь идет полное переподключение, сначала же все нормально))) может как-то еще нужно сообщит mysql что процесс умер:)

   
 
 автор: Poison   (10.08.2007 в 10:22)   письмо автору
 
   для: Poison   (09.08.2007 в 09:27)
 


<? ?>

   
 
 автор: Trianon   (10.08.2007 в 10:45)   письмо автору
 
   для: Poison   (09.08.2007 в 09:27)
 

а если после переподключения заказать сперва latin1 и скразу после этого cp1251?

Если клиентская сторона кеширует эти запросы, то по идее может помочь...

   
 
 автор: Poison   (10.08.2007 в 10:54)   письмо автору
 
   для: Trianon   (10.08.2007 в 10:45)
 

Ну вот)) нашел решение!
До эттого я для проверки вместо mysql_ping() использовал mysql_query("SELECT NULL") попробывал вместо этого поставить mysql_query( "SET NAMES 'cp1251'", $this->db_id ) хм... и все заработало!;)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования