1
0
mirror of https://github.com/e107inc/e107.git synced 2025-08-14 02:24:08 +02:00

Convert and run e107 using the MySQL/MariaDB utf8mb4 character set and

InnoDB storage engine

Components affected:
* `db_verify` now checks and corrects the table storage engine
* `db_verify` now checks and corrects the table default character set
  * Note: Field character sets can still be overridden
  * Note: When correcting, the entire table is converted to the target
    charset.
* The alt_auth plugin now connects via PDO using the e107 default
  charset, utf8mb4
* `e_db_pdo` now sets the charset to utf8mb4. This is currently not
  customizable because it was previously not customizable.
* `install.php` now generates an `e107_config.php` file with
  `$mySQLcharset = 'utf8mb4';`, though this option is not actually used.
* `install.php` now removes plugin tables before installing plugins.
* `e_db_mysql` now only accepts the `utf8mb4` charset. Previously, it
  only accepted the `utf8` charset.
* `e_db_mysql` now configures `mysqli_real_escape_string` to match the
  new default charset, `utf8mb4`.
* Plugin installations now use the preferred MySQL table storage engines
  and charsets.

The preferred MySQL table storage engines are now mapped like so:
* If `ENGINE=MyISAM` is specified, the actual storage engine set will be
  the first available of: InnoDB, Aria, Maria, MyISAM
* If `ENGINE=Aria` is specified, the actual storage engine set will be
  the first available of: Aria, Maria, MyISAM
* If `ENGINE=InnoDB` is specified, the actual storage engine set will be
  the first available of: InnoDB, XtraDB
* If `ENGINE=XtraDB` is specified, the actual storage engine set will be
  the first available of: XtraDB, InnoDB

The preferred MySQL character set is now aliased like so:
* `utf8`    => `utf8mb4`
* `utf8mb3` => `utf8mb3`
* `utf8mb4` => `utf8mb4`

Fixes: #4501
This commit is contained in:
Nick Liu
2021-05-22 00:46:35 -05:00
parent 9461602e43
commit d790faa049
12 changed files with 469 additions and 133 deletions

View File

@@ -3412,9 +3412,8 @@ class e107plugin
return null;
}
/** @var db_verify $dbv */
$dbv = e107::getSingleton('db_verify', e_HANDLER."db_verify_class.php");
// require_once(e_HANDLER."db_verify_class.php");
// $dbv = new db_verify;
$sql = e107::getDb();
// Add or Remove Table --------------
@@ -3436,12 +3435,15 @@ class e107plugin
foreach($tableData['tables'] as $k=>$v)
{
$engine = $dbv->getIntendedStorageEngine($tableData['engine'][$k]);
$charset = $dbv->getIntendedCharset($tableData['charset'][$k]);
switch($function)
{
case "install":
$query = "CREATE TABLE `".MPREFIX.$v."` (\n";
$query .= $tableData['data'][$k];
$query .= "\n) ENGINE=". vartrue($tableData['engine'][$k],"InnoDB")." DEFAULT CHARSET=utf8 ";
$query .= "\n) ENGINE=$engine DEFAULT CHARSET=$charset ";
$txt = EPL_ADLAN_239." <b>{$v}</b> ";
$status = $sql->db_Query($query) ? E_MESSAGE_SUCCESS : E_MESSAGE_ERROR;
@@ -4633,7 +4635,7 @@ class e107plugin
/**
* Installs a plugin by ID or folder name
*
* @param int $id
* @param int|string $id
* @param array $options (currently only 'nolinks' - set to true to prevent sitelink creation during install)
*/
function install($id, $options = array())