diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
index 85d6fbed33ec5d519ae75a6d47e568c7d4e6e94e..f9dd0c0850a02d6933fb24e2fac6ce31d5e65bae 100644
--- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
+++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
@@ -162,11 +162,19 @@ protected function hasSharedTableStructureChange(EntityTypeInterface $entity_typ
    *   Returns TRUE if there have been changes.
    */
   protected function hasSharedTableNameChanges(EntityTypeInterface $entity_type, EntityTypeInterface $original) {
+    $base_table = $this->database->schema()->tableExists($entity_type->getBaseTable());
+    $data_table = $this->database->schema()->tableExists($entity_type->getDataTable());
+    $revision_table = $this->database->schema()->tableExists($entity_type->getRevisionTable());
+    $revision_data_table = $this->database->schema()->tableExists($entity_type->getRevisionDataTable());
+
+    // We first check if the new table already exists because the storage might
+    // have created it even though it wasn't specified in the entity type
+    // definition.
     return
-      $entity_type->getBaseTable() != $original->getBaseTable() ||
-      $entity_type->getDataTable() != $original->getDataTable() ||
-      $entity_type->getRevisionTable() != $original->getRevisionTable() ||
-      $entity_type->getRevisionDataTable() != $original->getRevisionDataTable();
+      (!$base_table && $entity_type->getBaseTable() != $original->getBaseTable()) ||
+      (!$data_table && $entity_type->getDataTable() != $original->getDataTable()) ||
+      (!$revision_table && $entity_type->getRevisionTable() != $original->getRevisionTable()) ||
+      (!$revision_data_table && $entity_type->getRevisionDataTable() != $original->getRevisionDataTable());
   }
 
   /**
diff --git a/core/modules/block_content/block_content.install b/core/modules/block_content/block_content.install
index 4279cdef722865bf0c436173aae2a581a350a94a..6af2ac4e8f2569531443e6a145fe227d3d897bb1 100644
--- a/core/modules/block_content/block_content.install
+++ b/core/modules/block_content/block_content.install
@@ -61,3 +61,14 @@ function block_content_update_8003() {
   \Drupal::entityDefinitionUpdateManager()
     ->installFieldStorageDefinition('revision_user', 'block_content', 'block_content', $revision_user);
 }
+
+/**
+ * Fix the block_content entity type to specify its revision data table.
+ */
+function block_content_update_8300() {
+  $definition_update_manager = \Drupal::entityDefinitionUpdateManager();
+  $entity_type = $definition_update_manager->getEntityType('block_content');
+  $entity_type->set('revision_data_table', 'block_content_field_revision');
+  $definition_update_manager->updateEntityType($entity_type);
+
+}
diff --git a/core/modules/block_content/src/Entity/BlockContent.php b/core/modules/block_content/src/Entity/BlockContent.php
index 11c0c5470d81da95d906cba334848f09a5c534f7..b7c3d4dc1278c4aa85059333e399ff529bccce96 100644
--- a/core/modules/block_content/src/Entity/BlockContent.php
+++ b/core/modules/block_content/src/Entity/BlockContent.php
@@ -35,6 +35,7 @@
  *   base_table = "block_content",
  *   revision_table = "block_content_revision",
  *   data_table = "block_content_field_data",
+ *   revision_data_table = "block_content_field_revision",
  *   show_revision_ui = TRUE,
  *   links = {
  *     "canonical" = "/block/{block_content}",
diff --git a/core/modules/block_content/src/Tests/BlockContentUpdateEntityFields.php b/core/modules/block_content/src/Tests/BlockContentUpdateEntityFields.php
deleted file mode 100644
index ab59eba282aa6330108433c8cef64eb422b0c02e..0000000000000000000000000000000000000000
--- a/core/modules/block_content/src/Tests/BlockContentUpdateEntityFields.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-namespace Drupal\block_content\Tests;
-
-use Drupal\Core\Field\BaseFieldDefinition;
-use Drupal\system\Tests\Update\UpdatePathTestBase;
-
-/**
- * Tests adding revision_user and revision_created fields.
- *
- * @group Update
- */
-class BlockContentUpdateEntityFields extends UpdatePathTestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setDatabaseDumpFiles() {
-    $this->databaseDumpFiles = [
-      __DIR__ . '/../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
-    ];
-  }
-
-  /**
-   * Tests that email token in status_blocked of user.mail is updated.
-   */
-  public function testAddingFields() {
-    $this->runUpdates();
-
-    $post_revision_created = \Drupal::entityDefinitionUpdateManager()->getFieldStorageDefinition('revision_created', 'block_content');
-    $post_revision_user = \Drupal::entityDefinitionUpdateManager()->getFieldStorageDefinition('revision_user', 'block_content');
-    $this->assertTrue($post_revision_created instanceof BaseFieldDefinition, "Revision created field found");
-    $this->assertTrue($post_revision_user instanceof BaseFieldDefinition, "Revision user field found");
-
-    $this->assertEqual('created', $post_revision_created->getType(), "Field is type created");
-    $this->assertEqual('entity_reference', $post_revision_user->getType(), "Field is type entity_reference");
-  }
-
-}
diff --git a/core/modules/block_content/src/Tests/BlockContentUpdateTest.php b/core/modules/block_content/src/Tests/BlockContentUpdateTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..77c12c653bbc553cae8cad8f4f4c1520e6f45f5d
--- /dev/null
+++ b/core/modules/block_content/src/Tests/BlockContentUpdateTest.php
@@ -0,0 +1,46 @@
+<?php
+
+namespace Drupal\block_content\Tests;
+
+use Drupal\Core\Field\BaseFieldDefinition;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
+
+/**
+ * Tests update functions for the Block Content module.
+ *
+ * @group Update
+ */
+class BlockContentUpdateTest extends UpdatePathTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setDatabaseDumpFiles() {
+    $this->databaseDumpFiles = [
+      __DIR__ . '/../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
+    ];
+  }
+
+  /**
+   * Tests the revision metadata fields and revision data table additions.
+   */
+  public function testSimpleUpdates() {
+    $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager();
+    $entity_type = $entity_definition_update_manager->getEntityType('block_content');
+    $this->assertNull($entity_type->getRevisionDataTable());
+
+    $this->runUpdates();
+
+    $post_revision_created = $entity_definition_update_manager->getFieldStorageDefinition('revision_created', 'block_content');
+    $post_revision_user = $entity_definition_update_manager->getFieldStorageDefinition('revision_user', 'block_content');
+    $this->assertTrue($post_revision_created instanceof BaseFieldDefinition, "Revision created field found");
+    $this->assertTrue($post_revision_user instanceof BaseFieldDefinition, "Revision user field found");
+
+    $this->assertEqual('created', $post_revision_created->getType(), "Field is type created");
+    $this->assertEqual('entity_reference', $post_revision_user->getType(), "Field is type entity_reference");
+
+    $entity_type = $entity_definition_update_manager->getEntityType('block_content');
+    $this->assertEqual('block_content_field_revision', $entity_type->getRevisionDataTable());
+  }
+
+}