- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/site_checker.php
- Класс: CSiteCheckerTest
- Вызов: CSiteCheckerTest::check_mysql_db_charset
function check_mysql_db_charset()
{
global $DB;
if ($this->arTestVars['check_mbstring_fail'])
return $this->Result(null, GetMessage('SC_MBSTRING_NA'));
elseif ($this->arTestVars['check_table_status_fail'])
return $this->Result(null, GetMessage('SC_TABLES_NEED_REPAIR'));
elseif ($this->arTestVars['check_connection_charset_fail'])
return $this->Result(null, GetMessage('SC_CONNECTION_CHARSET_NA'));
$strError = '';
$res = $DB->Query('SHOW VARIABLES LIKE "character_set_connection"');
$f = $res->Fetch();
$character_set_connection = $f['Value'];
$res = $DB->Query('SHOW VARIABLES LIKE "collation_connection"');
$f = $res->Fetch();
$collation_connection = $f['Value'];
$res = $DB->Query('SHOW VARIABLES LIKE "character_set_database"');
$f = $res->Fetch();
$character_set_database = $f['Value'];
$res = $DB->Query('SHOW VARIABLES LIKE "collation_database"');
$f = $res->Fetch();
$collation_database = $f['Value'];
if ($this->fix_mode)
{
if (!$DB->Query($sql = 'ALTER DATABASE ' . $DB->quote($DB->DBName). ' DEFAULT CHARACTER SET ' . $character_set_connection . ' COLLATE ' . $collation_connection, true))
{
$strError = $sql . ' [' . $DB->db_Error . ']';
}
}
else
{
if ($character_set_connection != $character_set_database)
{
$strError = GetMessage('SC_DATABASE_CHARSET_DIFF', array('#VAL0#' => $character_set_connection, '#VAL1#' => $character_set_database)).fix_link();
}
elseif ($collation_database != $collation_connection)
{
$strError = GetMessage('SC_DATABASE_COLLATION_DIFF', array('#VAL0#' => $collation_connection, '#VAL1#' => $collation_database)).fix_link();
}
}
echo 'CHARSET='.$character_set_database.', COLLATION='.$collation_database;
if (!$strError)
return true;
$this->arTestVars['db_charset_fail'] = true;
return $this->Result(false, $strError);
}