• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/site_checker.php
  • Класс: CSiteCheckerTest
  • Вызов: CSiteCheckerTest::check_mysql_connection_charset
function check_mysql_connection_charset()
{
	global $DB;
	$strError = '';

	if ($this->arTestVars['check_mbstring_fail'])
	{
		return $this->Result(null, GetMessage('SC_MBSTRING_NA'));
	}

	$res = $DB->Query('SHOW VARIABLES LIKE "character_set_connection"');
	$f = $res->Fetch();
	$character_set_connection = $f['Value'];

	$res = $DB->Query('SHOW VARIABLES LIKE "character_set_results"');
	$f = $res->Fetch();
	$character_set_results = $f['Value'];

	$res = $DB->Query('SHOW VARIABLES LIKE "collation_connection"');
	$f = $res->Fetch();
	$collation_connection = $f['Value'];

	$bAllIn1251 = true;
	$res1 = $DB->Query('SELECT C.CHARSET FROM b_lang L, b_culture C WHERE C.ID=L.CULTURE_ID AND L.ACTIVE="Y"'); // for 'no kernel mode'
	while($f1 = $res1->Fetch())
	{
		$bAllIn1251 = $bAllIn1251 && trim(strtolower($f1['CHARSET'])) == 'windows-1251';
	}

	if (defined('BX_UTF') && BX_UTF === true)
	{
		if (!in_array($character_set_connection, ['utf8', 'utf8mb3']))
		{
			$strError = GetMessage("SC_CONNECTION_CHARSET_WRONG", ['#VAL#' => 'utf8', '#VAL1#' => $character_set_connection]);
		}
		elseif (!in_array($collation_connection, ['utf8_unicode_ci', 'utf8mb3_unicode_ci', 'utf8mb3_general_ci']))
		{
			$strError = GetMessage("SC_CONNECTION_COLLATION_WRONG_UTF", ['#VAL#' => $collation_connection]);
		}
	}
	else
	{
		if ($bAllIn1251 && $character_set_connection != 'cp1251')
		{
			$strError = GetMessage("SC_CONNECTION_CHARSET_WRONG", ['#VAL#' => 'cp1251', '#VAL1#' => $character_set_connection]);
		}
		elseif ($character_set_connection == 'utf8')
		{
			$strError = GetMessage("SC_CONNECTION_CHARSET_WRONG_NOT_UTF", ['#VAL#' => $character_set_connection]);
		}
	}

	if (!$strError && $character_set_connection != $character_set_results)
	{
		$strError = GetMessage('SC_CHARSET_CONN_VS_RES',['#CONN#' => $character_set_connection, '#RES#' => $character_set_results]);
	}

	echo 'character_set_connection='.$character_set_connection.', collation_connection='.$collation_connection.', character_set_results='.$character_set_results;

	if (!$strError)
	{
		return true;
	}

	$this->arTestVars['check_connection_charset_fail'] = true;

	return $this->Result(false, $strError);
}