From d0857345d0f99c5f388d4dae7417001666d67d86 Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Thu, 5 Dec 2019 13:45:25 +0100 Subject: [PATCH] DbConnection: Set `COLLATE 'latin1_general_ci'` for `latin1` charsets MySQL 8+ seems a bit more strict now. --- library/Icinga/Data/Db/DbConnection.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/library/Icinga/Data/Db/DbConnection.php b/library/Icinga/Data/Db/DbConnection.php index 3622dfe75..db9962a54 100644 --- a/library/Icinga/Data/Db/DbConnection.php +++ b/library/Icinga/Data/Db/DbConnection.php @@ -205,8 +205,15 @@ class DbConnection implements Selectable, Extensible, Updatable, Reducible, Insp . 'ANSI_QUOTES,PIPES_AS_CONCAT,NO_ENGINE_SUBSTITUTION\''; if (isset($adapterParamaters['charset'])) { $driverOptions[PDO::MYSQL_ATTR_INIT_COMMAND] .= ', NAMES ' . $adapterParamaters['charset']; + if (trim($adapterParamaters['charset']) === 'latin1') { + // Required for MySQL 8+ because we need PIPES_AS_CONCAT and + // have several columns with explicit COLLATE instructions + $driverOptions[PDO::MYSQL_ATTR_INIT_COMMAND] .= ' COLLATE latin1_general_ci'; + } + unset($adapterParamaters['charset']); } + $driverOptions[PDO::MYSQL_ATTR_INIT_COMMAND] .= ", time_zone='" . $this->defaultTimezoneOffset() . "'"; $driverOptions[PDO::MYSQL_ATTR_INIT_COMMAND] .=';'; $defaultPort = 3306;