catch (\Exception
$e) { // Detect utf8mb4 incompatibility.
if ($e->
getCode() == Connection::UNSUPPORTED_CHARSET
|| ($e->
getCode() == Connection::SQLSTATE_SYNTAX_ERROR &&
$e->errorInfo
[1
] == Connection::UNKNOWN_CHARSET
)) { $this->
fail(t('Your MySQL server and PHP MySQL driver must support utf8mb4 character encoding. Make sure to use a database system that supports this (such as MySQL/MariaDB/Percona 5.5.3 and up), and that the utf8mb4 character set is compiled in. See the <a href=":documentation" target="_blank">MySQL documentation</a> for more information.',
[':documentation' => 'https://dev.mysql.com/doc/refman/5.0/en/cannot-initialize-character-set.html'
]));
$info = Database::
getConnectionInfo();
$info_copy =
$info;
// Set a flag to fall back to utf8. Note: this flag should only be
// used here and is for internal use only.
$info_copy['default'
]['_dsn_utf8_fallback'
] = TRUE;
// In order to change the Database::$databaseInfo array, we need to
// remove the active connection, then re-add it with the new info.
Database::
removeConnection('default'
);
Database::
addConnectionInfo('default', 'default',
$info_copy['default'
]);
// Connect with the new database info, using the utf8 character set so
// that we can run the checkEngineVersion test.
Database::
getConnection();
// Revert to the old settings.
Database::
removeConnection('default'
);
Database::
addConnectionInfo('default', 'default',
$info['default'
]);
} else { // Rethrow the exception.
throw $e;
}