diff options
author | Morris Jobke <hey@morrisjobke.de> | 2015-07-30 13:57:04 +0200 |
---|---|---|
committer | Morris Jobke <hey@morrisjobke.de> | 2016-10-19 00:15:01 +0200 |
commit | cc28f82b369c2e8ebf2d0b4390379b9cda4af40b (patch) | |
tree | 3681f1e92af5a4bc0c581d3314e5cb37b00dd63a /lib/private/Repair/Collation.php | |
parent | 972e560e7274cf25021b1a5095206640b063789a (diff) | |
download | nextcloud-server-cc28f82b369c2e8ebf2d0b4390379b9cda4af40b.tar.gz nextcloud-server-cc28f82b369c2e8ebf2d0b4390379b9cda4af40b.zip |
Add config option to update charset of mysql to utf8mb4
* fully optional
* requires additional options set in the database
Diffstat (limited to 'lib/private/Repair/Collation.php')
-rw-r--r-- | lib/private/Repair/Collation.php | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/private/Repair/Collation.php b/lib/private/Repair/Collation.php index 74c4ca2e6ac..c19b8eea5ec 100644 --- a/lib/private/Repair/Collation.php +++ b/lib/private/Repair/Collation.php @@ -61,10 +61,12 @@ class Collation implements IRepairStep { return; } + $characterSet = $this->config->getSystemValue('mysql.utf8mb4', false) ? 'utf8mb4' : 'utf8'; + $tables = $this->getAllNonUTF8BinTables($this->connection); foreach ($tables as $table) { $output->info("Change collation for $table ..."); - $query = $this->connection->prepare('ALTER TABLE `' . $table . '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;'); + $query = $this->connection->prepare('ALTER TABLE `' . $table . '` CONVERT TO CHARACTER SET ' . $characterSet . ' COLLATE ' . $characterSet . '_bin;'); $query->execute(); } } @@ -75,11 +77,12 @@ class Collation implements IRepairStep { */ protected function getAllNonUTF8BinTables($connection) { $dbName = $this->config->getSystemValue("dbname"); + $characterSet = $this->config->getSystemValue('mysql.utf8mb4', false) ? 'utf8mb4' : 'utf8'; $rows = $connection->fetchAll( "SELECT DISTINCT(TABLE_NAME) AS `table`" . " FROM INFORMATION_SCHEMA . COLUMNS" . " WHERE TABLE_SCHEMA = ?" . - " AND (COLLATION_NAME <> 'utf8_bin' OR CHARACTER_SET_NAME <> 'utf8')" . + " AND (COLLATION_NAME <> '" . $characterSet . "_bin' OR CHARACTER_SET_NAME <> '" . $characterSet . "')" . " AND TABLE_NAME LIKE \"*PREFIX*%\"", array($dbName) ); |