diff --git a/core/modules/mysql/mysql.services.yml b/core/modules/mysql/mysql.services.yml
deleted file mode 100644
index c20d7f1833c4856ec2e459bd09342ccc7b1ba8e7..0000000000000000000000000000000000000000
--- a/core/modules/mysql/mysql.services.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-services:
-  mysql.views.cast_sql:
-    class: Drupal\mysql\Plugin\views\query\MysqlCastSql
-    public: false
diff --git a/core/modules/mysql/src/MysqlServiceProvider.php b/core/modules/mysql/src/MysqlServiceProvider.php
new file mode 100644
index 0000000000000000000000000000000000000000..8c1578e25827789a8188c9f66933c227e9cb8175
--- /dev/null
+++ b/core/modules/mysql/src/MysqlServiceProvider.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace Drupal\mysql;
+
+use Drupal\Core\DependencyInjection\ContainerBuilder;
+use Drupal\Core\DependencyInjection\ServiceProviderBase;
+use Drupal\mysql\Plugin\views\query\MysqlCastSql;
+
+/**
+ * Registers the 'mysql.views.cast_sql' service when views is installed.
+ */
+class MysqlServiceProvider extends ServiceProviderBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function register(ContainerBuilder $container): void {
+    if (isset($container->getParameter('container.modules')['views'])) {
+      $container
+        ->register('mysql.views.cast_sql', MysqlCastSql::class)
+        ->setPublic(FALSE);
+    }
+  }
+
+}
diff --git a/core/modules/mysql/tests/src/Kernel/mysql/ViewsTest.php b/core/modules/mysql/tests/src/Kernel/mysql/ViewsTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d2914692ce78550d29c43f8f10cd1b33d91c24c8
--- /dev/null
+++ b/core/modules/mysql/tests/src/Kernel/mysql/ViewsTest.php
@@ -0,0 +1,36 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Drupal\Tests\mysql\Kernel\mysql;
+
+use Drupal\Core\DependencyInjection\ContainerBuilder;
+use Drupal\KernelTests\Core\Database\DriverSpecificDatabaseTestBase;
+use Drupal\mysql\Plugin\views\query\MysqlCastSql;
+
+/**
+ * Tests views service.
+ *
+ * @group Database
+ */
+class ViewsTest extends DriverSpecificDatabaseTestBase {
+
+  /**
+   * Tests views service.
+   */
+  public function testViewsService(): void {
+    $this->assertFalse($this->container->has('views.cast_sql'));
+    $this->enableModules(['views']);
+    $this->assertInstanceOf(MysqlCastSql::class, $this->container->get('views.cast_sql'));
+    $this->assertFalse($this->container->has('mysql.views.cast_sql'));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function register(ContainerBuilder $container): void {
+    parent::register($container);
+    $this->assertSame($container->hasDefinition('mysql.views.cast_sql'), isset($container->getParameter('container.modules')['views']));
+  }
+
+}
diff --git a/core/modules/views/views.services.yml b/core/modules/views/views.services.yml
index eb07ae2497604582d9932b1e2b298edef362cd12..2a3aa1a16fad951b255bdc2e5aa25e8f53cc2e66 100644
--- a/core/modules/views/views.services.yml
+++ b/core/modules/views/views.services.yml
@@ -106,3 +106,4 @@ services:
     class: Drupal\views\Plugin\views\query\CastSql
     tags:
       - { name: backend_overridable }
+  Drupal\views\Plugin\views\query\CastSqlInterface: '@views.cast_sql'