From aa17a6c8b500db0ab35de1ce4a86b07b60128727 Mon Sep 17 00:00:00 2001 From: Saleh Saeed Date: Tue, 1 Jun 2021 23:57:02 +0200 Subject: [PATCH] Fix Charset passed via URL is overridden (#1363) --- ConnectionFactory.php | 14 ++++++++------ Tests/ConnectionFactoryTest.php | 7 +++++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/ConnectionFactory.php b/ConnectionFactory.php index 7640ed3d3..28078b93f 100644 --- a/ConnectionFactory.php +++ b/ConnectionFactory.php @@ -81,14 +81,16 @@ public function createConnection(array $params, ?Configuration $config = null, ? $params['dbname'] .= $params['dbname_suffix']; } - if ($driver instanceof AbstractMySQLDriver) { - $params['charset'] = 'utf8mb4'; + if (! isset($params['charset'])) { + if ($driver instanceof AbstractMySQLDriver) { + $params['charset'] = 'utf8mb4'; - if (! isset($params['defaultTableOptions']['collate'])) { - $params['defaultTableOptions']['collate'] = 'utf8mb4_unicode_ci'; + if (! isset($params['defaultTableOptions']['collate'])) { + $params['defaultTableOptions']['collate'] = 'utf8mb4_unicode_ci'; + } + } else { + $params['charset'] = 'utf8'; } - } else { - $params['charset'] = 'utf8'; } if ($wrapperClass !== null) { diff --git a/Tests/ConnectionFactoryTest.php b/Tests/ConnectionFactoryTest.php index fd68d6748..b9fdfa77c 100644 --- a/Tests/ConnectionFactoryTest.php +++ b/Tests/ConnectionFactoryTest.php @@ -98,6 +98,13 @@ public function testConnectionOverrideOptions(): void $this->assertEquals($params, array_intersect_key($connection->getParams(), $params)); } + public function testConnectionCharsetFromUrl() + { + $connection = (new ConnectionFactory([]))->createConnection(['url' => 'mysql://root:password@database:3306/main?charset=utf8mb4_unicode_ci']); + + $this->assertEquals('utf8mb4_unicode_ci', $connection->getParams()['charset']); + } + public function testDbnameSuffix(): void { $connection = (new ConnectionFactory([]))->createConnection([