Я, кажется, нашел первопричину этой проблемы и способ ее устранения:
В файле class_core.php, в классе vB_Database_MySQLi есть процедура db_connect с таким куском кода:
PHP код:
if (!empty($charset))
{
if (function_exists('mysqli_set_charset'))
{
mysqli_set_charset($link, $charset);
}
else
{
$this->sql = "SET NAMES $charset";
$this->execute_query(true, $link);
}
}
Как показали эксперименты - в установленной на моем серваке версии php (5.1.4) процедура mysqli_set_charset существует, но отрабатывает некорректно. После комментирования части кода:
PHP код:
if (!empty($charset))
{
//if (function_exists('mysqli_set_charset'))
//{
// mysqli_set_charset($link, $charset);
//}
//else
//{
$this->sql = "SET NAMES $charset";
$this->execute_query(true, $link);
//}
}
(т.е. не проверять наличие процедуры mysqli_set_charset и не использовать ее, а использовать SET NAMES) все переменные в MySQL (character_set_* и collation_*) устанавливаются правильно.
Кто общается с разработчиками - подскажите им, пожалуйста, отказаться от использования mysqli_set_charset.
А предлагаемая мною правка универсальна для любого чарсета - не только cp1251.