1
0
mirror of https://github.com/e107inc/e107.git synced 2025-07-30 19:30:25 +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

@@ -833,13 +833,13 @@ class e_install
if($this->previous_steps['mysql']['createdb'] == 1)
{
$notification = "<br /><span class='glyphicon glyphicon-ok'></span> ".LANINS_044;
$query = 'CREATE DATABASE `'.$this->previous_steps['mysql']['db'].'` CHARACTER SET `utf8` ';
$query = 'CREATE DATABASE `'.$this->previous_steps['mysql']['db'].'` CHARACTER SET `utf8mb4` ';
}
else
{
$notification = "<br /><span class='glyphicon glyphicon-ok'></span> ".LANINS_137;
$query = 'ALTER DATABASE `'.$this->previous_steps['mysql']['db'].'` CHARACTER SET `utf8` ';
$query = 'ALTER DATABASE `'.$this->previous_steps['mysql']['db'].'` CHARACTER SET `utf8mb4` ';
}
if (!$this->dbqry($query))
@@ -854,7 +854,7 @@ class e_install
}
else
{
$this->dbqry('SET NAMES `utf8`');
$this->dbqry('SET NAMES `utf8mb4`');
$page_content .= $notification; // "
}
@@ -1496,7 +1496,7 @@ class e_install
\$mySQLpassword = '{$this->previous_steps['mysql']['password']}';
\$mySQLdefaultdb = '{$this->previous_steps['mysql']['db']}';
\$mySQLprefix = '{$this->previous_steps['mysql']['prefix']}';
\$mySQLcharset = 'utf8';
\$mySQLcharset = 'utf8mb4';
\$ADMIN_DIRECTORY = '{$this->e107->e107_dirs['ADMIN_DIRECTORY']}';
\$FILES_DIRECTORY = '{$this->e107->e107_dirs['FILES_DIRECTORY']}';
@@ -1903,9 +1903,10 @@ if($this->pdo == true)
*/
public function install_plugin($plugpath)
{
e107::getPlugin()->install_plugin($plugpath);
// e107::getPlugin()->install_plugin($row['plugin_id']);
$plugin_handler = e107::getPlugin();
$plugin_handler->XmlTables('uninstall', ['plugin_path' => $plugpath], ['delete_tables' => true]);
$plugin_handler->install($plugpath);
e107::getMessage()->reset(false, false, true);
return null;
@@ -2165,7 +2166,7 @@ if($this->pdo == true)
preg_match_all("/create(.*?)(?:myisam|innodb);/si", $sql_data, $result );
// Force UTF-8 again
$this->dbqry('SET NAMES `utf8`');
$this->dbqry('SET NAMES `utf8mb4`');
$srch = array("CREATE TABLE","(");
$repl = array("DROP TABLE IF EXISTS","");