diff --git a/DependencyInjection/DoctrineExtension.php b/DependencyInjection/DoctrineExtension.php index 2d6183d79..ac7d338f4 100644 --- a/DependencyInjection/DoctrineExtension.php +++ b/DependencyInjection/DoctrineExtension.php @@ -27,6 +27,7 @@ use Symfony\Component\Messenger\Transport\Doctrine\DoctrineTransportFactory; use Symfony\Component\PropertyInfo\PropertyInfoExtractorInterface; use function class_exists; +use function in_array; use function sprintf; /** @@ -199,6 +200,14 @@ protected function getConnectionOptions($connection) { $options = $connection; + if (! isset($options['charset'])) { + if (isset($options['url'])) { + $options['charset'] = strpos($options['url'], 'mysql') === 0 ? 'utf8mb4' : 'utf8'; + } else { + $options['charset'] = in_array($options['driver'], ['mysqli', 'pdo_mysql'], true) ? 'utf8mb4' : 'utf8'; + } + } + if (isset($options['platform_service'])) { $options['platform'] = new Reference($options['platform_service']); unset($options['platform_service']); diff --git a/Tests/DependencyInjection/AbstractDoctrineExtensionTest.php b/Tests/DependencyInjection/AbstractDoctrineExtensionTest.php index 9e5c3b223..b4590a851 100644 --- a/Tests/DependencyInjection/AbstractDoctrineExtensionTest.php +++ b/Tests/DependencyInjection/AbstractDoctrineExtensionTest.php @@ -123,6 +123,7 @@ public function testDbalLoadSingleMasterSlaveConnection() 'dbname' => 'mysql_db', 'host' => 'localhost', 'unix_socket' => '/path/to/mysqld.sock', + 'charset' => 'utf8mb4', ], $param['master'] ); @@ -157,6 +158,7 @@ public function testDbalLoadPoolShardingConnection() 'dbname' => 'mysql_db', 'host' => 'localhost', 'unix_socket' => '/path/to/mysqld.sock', + 'charset' => 'utf8mb4', ], $param['global'] ); @@ -207,6 +209,7 @@ public function testLoadSimpleSingleConnection() 'driver' => 'pdo_mysql', 'driverOptions' => [], 'defaultTableOptions' => [], + 'charset' => 'utf8mb4', ], new Reference('doctrine.dbal.default_connection.configuration'), new Reference('doctrine.dbal.default_connection.event_manager'), @@ -242,6 +245,7 @@ public function testLoadSimpleSingleConnectionWithoutDbName() 'driver' => 'pdo_mysql', 'driverOptions' => [], 'defaultTableOptions' => [], + 'charset' => 'utf8mb4', ], new Reference('doctrine.dbal.default_connection.configuration'), new Reference('doctrine.dbal.default_connection.event_manager'), @@ -278,6 +282,7 @@ public function testLoadSingleConnection() 'dbname' => 'sqlite_db', 'memory' => true, 'defaultTableOptions' => [], + 'charset' => 'utf8', ], new Reference('doctrine.dbal.default_connection.configuration'), new Reference('doctrine.dbal.default_connection.event_manager'),