Помогите разобраться с кодировками

Вот функция конекта:
Код:
if(!($this->_resource = @mysql_connect ($cfg->dbhost.$port, $cfg->dbuser, $cfg->dbpasswd))){
                echo '<html><body><br><br>
                    <span style="font-family: Arial, Helvetica, sans-serif; font-size: 1.5em">
                    Sorry... Our Site seems to be down temporarily.</span></body></html>';
                exit;
Подскажите как сюда подставить SET NAMES 'utf8' ?

if ( ! ($this->_resource = @mysql_connect ($cfg->dbhost.$port, $cfg->dbuser, $cfg->dbpasswd)))
{
echo '<html><body><br><br>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: 1.5em">
Sorry... Our Site seems to be down temporarily.</span></body></html>';
exit;
}
else
{
@mysql_query("SET NAMES 'utf8'", $this->_resource);
}
 
Для просмотра ссылки Войди или Зарегистрируйся
Вся функция целиком:
Код:
    function Database( $cfg )
    {
        global $root_path;
        if(is_object($cfg)){
            $port = empty($cfg->dbport) ? '' : ':'. (int) $cfg->dbport;
 
            if(!($this->_resource = @mysql_connect ($cfg->dbhost.$port, $cfg->dbuser, $cfg->dbpasswd))){
                echo '<html><body><br><br>
                    <span style="font-family: Arial, Helvetica, sans-serif; font-size: 1.5em">
                    Sorry... Our Site seems to be down temporarily.</span></body></html>';
                exit;
                //echo 'Error - ', mysql_error(), ' Host: ', $cfg->dbhost;
                //return false;
            }else if(!(@mysql_select_db($cfg->dbname))){
                echo 'Error - ', mysql_error(), ' Database: ', $cfg->dbname;
                mysql_close($this->_resource);
                return false;
            }else{
                $this->_table_prefix = $cfg->table_prefix;
                $this->_db = $this->_resource;
            }
        }
    }
 
Для просмотра ссылки Войди или Зарегистрируйся
Вся функция целиком:
Код:
    function Database( $cfg )
    {
        global $root_path;
        if(is_object($cfg)){
            $port = empty($cfg->dbport) ? '' : ':'. (int) $cfg->dbport;
 
            if(!($this->_resource = @mysql_connect ($cfg->dbhost.$port, $cfg->dbuser, $cfg->dbpasswd))){
                echo '<html><body><br><br>
                    <span style="font-family: Arial, Helvetica, sans-serif; font-size: 1.5em">
                    Sorry... Our Site seems to be down temporarily.</span></body></html>';
                exit;
                //echo 'Error - ', mysql_error(), ' Host: ', $cfg->dbhost;
                //return false;
            }else if(!(@mysql_select_db($cfg->dbname))){
                echo 'Error - ', mysql_error(), ' Database: ', $cfg->dbname;
                mysql_close($this->_resource);
                return false;
            }else{
                $this->_table_prefix = $cfg->table_prefix;
                $this->_db = $this->_resource;
            }
        }
    }
function Database( $cfg )
{

global $root_path;

if (is_object($cfg))
{

$port = empty($cfg->dbport) ? '' : ':'. (int) $cfg->dbport;

if ( ! $this->_resource = @mysql_connect($cfg->dbhost.$port, $cfg->dbuser, $cfg->dbpasswd))
{

echo '<html><body><br><br>

<span style="font-family: Arial, Helvetica, sans-serif; font-size: 1.5em">

Sorry... Our Site seems to be down temporarily.</span></body></html>';

exit;

//echo 'Error - ', mysql_error(), ' Host: ', $cfg->dbhost;

//return false;

}
else if ( ! @mysql_select_db($cfg->dbname))
{

echo 'Error - ', mysql_error(), ' Database: ', $cfg->dbname;

mysql_close($this->_resource);

return false;

}
else
{
@mysql_query("SET NAMES 'utf8'", $this->_resource);

$this->_table_prefix = $cfg->table_prefix;

$this->_db = $this->_resource;

}

}

}
 
Немного не верно. Правильнее будет так:
Код:
<?php
 
function Database( $cfg )
{
 
global $root_path;
 
if (is_object($cfg))
{
 
$port = empty($cfg->dbport) ? '' : ':'. (int) $cfg->dbport;
 
if ( ! $this->_resource = @mysql_connect($cfg->dbhost.$port, $cfg->dbuser, $cfg->dbpasswd))
{
 
echo '<html><body><br><br>
 
<span style="font-family: Arial, Helvetica, sans-serif; font-size: 1.5em">
 
Sorry... Our Site seems to be down temporarily.</span></body></html>';
 
exit;
 
//echo 'Error - ', mysql_error(), ' Host: ', $cfg->dbhost;
 
//return false;
 
}
 
 
if($this->_resource && is_resource($this->_resource) && (version_compare(mysql_get_server_info(), '4.1', '<') ? '0' : '1')){
        mysql_query( "set session character_set_server=utf8", $this->_resource );
        mysql_query( "set session character_set_database=utf8", $this->_resource );
        mysql_query( "set session character_set_connection=utf8", $this->_resource );
        mysql_query( "set session character_set_results=utf8", $this->_resource );
        mysql_query( "set session character_set_client=utf8", $this->_resource );       
}
 
if ( ! @mysql_select_db($cfg->dbname)){
 
echo 'Error - ', mysql_error(), ' Database: ', $cfg->dbname;
 
mysql_close($this->_resource);
 
return false;
 
} else {
 
$this->_table_prefix = $cfg->table_prefix;
 
$this->_db = $this->_resource;
 
}
 
}
 
}
В чем разница?
MYSQL SET NAMES не меняет кодировку подсоединения к базе данных.
Требуется дополнительная проверка, является ли ресурсом указатель подсоединения к базе данных
Установку кодировок требуется осуществлять ДО выбора базы данных.
Требуется проверять версию mysql -> 4
Странное использование указателя $this на текущий объект без класса, как такового. Или это "часть" класса?
Какой же такой движок, мне интересно, настолько тупит, что выбрасывает ошибки mysql прямо в браузер посетителя? Ай, ай ,Ай
 
В файле my.ini
в разделе [mysqld]
character-set-server=utf8
collation-server=utf8_unicode_ci
init-connect='SET NAMES utf8'
в разделе [mysql]
default-character-set=utf8
 
В файле my.ini
в разделе [mysqld]
character-set-server=utf8
collation-server=utf8_unicode_ci
init-connect='SET NAMES utf8'
в разделе [mysql]
default-character-set=utf8
Набор постов?:)Или это вы там о wndows сказали "серверах"?
Во первых, my.cnf для unix/linux vds, который находится в /etc/my.cnf, либо в /ect/mysql/my.cnf.
После чего нужно сделать еще и рестарт mysql к тому же.
Варианты могут отличаться:
/etc/init.d/mysql restart //linux
/etc/rc.d/mysql restart //freebsd
Во вторых, это если VDS или свой сервер. Не сбивайте программистов с толку.
В третьих, достаточно только переустановки сессионных переменных несколькими запросами после подключения к текущей базе данных mysql_connect и до выбора самой базы данных mysql_select_db, и применимо только к Б.Д., старше 3.28 (set names будет недостаточно, они не устанавливают кодировки подключения).
Этого будет достаточно:
Код:
        mysql_query( "set session character_set_server=utf8" );
        mysql_query( "set session character_set_database=utf8" );
        mysql_query( "set session character_set_connection=utf8" );
        mysql_query( "set session character_set_results=utf8" );
        mysql_query( "set session character_set_client=utf8" );

Где utf8 - нужная кодировка.
И на этом игра с кодировками не закончится. Там может нарисоваться проблема с уже существующими данными. Которые придется либо удалить, либо скачать базу данных в текстовом формате, подобрать кодировку (у т.с., видимо, это windows-1251 или же iso, откройте дамп базы, и посмотрите, нормально ли читается текст? Если да, то кодировка выбрана верно) и конвертировать (сохранить) в utf8 (или нужную).
А также для каждой таблицы в CREATE PROCEDURE FUNCTION перед ; и указать /*!40101 DEFAULT CHARSET=utf8 */

Пример:

Код:
DROP TABLE IF EXISTS `ad_filter_categories`;
CREATE TABLE `ad_filter_categories` (
  `filter_id` int(11) NOT NULL default '0',
  `category_id` int(11) NOT NULL default '0',
  KEY `filter_id` (`filter_id`)
) ENGINE=MyISAM /*!40101 DEFAULT CHARSET=utf8 */;
После чего преобразованный дамп в кодировке utf-8 "закинуть" обратно.
В общем головной боли хватает.
Подробно все случаи игры с кодировками более ли менее разобраны Для просмотра ссылки Войди или Зарегистрируйся.
 
Назад
Сверху