• Модуль: 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);
}