aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/Repair/Collation.php
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2015-07-30 13:57:04 +0200
committerMorris Jobke <hey@morrisjobke.de>2016-10-19 00:15:01 +0200
commitcc28f82b369c2e8ebf2d0b4390379b9cda4af40b (patch)
tree3681f1e92af5a4bc0c581d3314e5cb37b00dd63a /lib/private/Repair/Collation.php
parent972e560e7274cf25021b1a5095206640b063789a (diff)
downloadnextcloud-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.php7
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)
);