search_api-8.x-1.15/modules/search_api_db/src/DatabaseCompatibility/MySql.php
modules/search_api_db/src/DatabaseCompatibility/MySql.php
<?php
namespace Drupal\search_api_db\DatabaseCompatibility;
use Drupal\Core\Database\DatabaseException;
use Drupal\search_api\SearchApiException;
/**
* Represents a MySQL-based database.
*/
class MySql extends GenericDatabase {
/**
* {@inheritdoc}
*/
public function alterNewTable($table, $type = 'text') {
// The Drupal MySQL integration defaults to using a 4-byte-per-character
// encoding, which would make it impossible to use our normal 255 characters
// long varchar fields in a primary key (since that would exceed the key's
// maximum size). Therefore, we have to convert all tables to the "utf8"
// character set – but we only want to make fulltext tables case-sensitive.
$charset = $type === 'text' ? 'utf8mb4' : 'utf8';
$collation = $type === 'text' ? 'utf8mb4_bin' : 'utf8_general_ci';
try {
$this->database->query("ALTER TABLE {{$table}} CONVERT TO CHARACTER SET '$charset' COLLATE '$collation'");
}
catch (\PDOException $e) {
$class = get_class($e);
$message = $e->getMessage();
throw new SearchApiException("$class while trying to change collation of $type search data table '$table': $message", 0, $e);
}
catch (DatabaseException $e) {
$class = get_class($e);
$message = $e->getMessage();
throw new SearchApiException("$class while trying to change collation of $type search data table '$table': $message", 0, $e);
}
}
}
