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