diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/StringItemBase.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/StringItemBase.php
index 4772983..11ccec6 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/StringItemBase.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/StringItemBase.php
@@ -40,4 +40,11 @@ public static function propertyDefinitions(FieldStorageDefinitionInterface $fiel
     return $properties;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function isEmpty() {
+    return $this->value === NULL || $this->value === '';
+  }
+
 }
diff --git a/core/modules/book/src/Tests/BookUninstallTest.php b/core/modules/book/src/Tests/BookUninstallTest.php
index c3739d8..2d2f7da 100644
--- a/core/modules/book/src/Tests/BookUninstallTest.php
+++ b/core/modules/book/src/Tests/BookUninstallTest.php
@@ -57,7 +57,7 @@ public function testBookUninstall() {
     $allowed_types[] = $content_type->id();
     $book_config->set('allowed_types', $allowed_types)->save();
 
-    $node = Node::create(array('type' => $content_type->id()));
+    $node = Node::create(array('title' => $this->randomString(), 'type' => $content_type->id()));
     $node->book['bid'] = 'new';
     $node->save();
 
@@ -65,7 +65,7 @@ public function testBookUninstall() {
     $validation_reasons = \Drupal::service('module_installer')->validateUninstall(['book']);
     $this->assertEqual(['To uninstall Book, delete all content that is part of a book'], $validation_reasons['book']);
 
-    $book_node = Node::create(array('type' => 'book'));
+    $book_node = Node::create(array('title' => $this->randomString(), 'type' => 'book'));
     $book_node->book['bid'] = FALSE;
     $book_node->save();
 
@@ -84,7 +84,7 @@ public function testBookUninstall() {
     $module_data = _system_rebuild_module_data();
     $this->assertFalse(isset($module_data['book']->info['required']), 'The book module is not required.');
 
-    $node = Node::create(array('type' => $content_type->id()));
+    $node = Node::create(array('title' => $this->randomString(), 'type' => $content_type->id()));
     $node->save();
     // One node exists but is not part of a book therefore the book module is
     // not required.
diff --git a/core/modules/content_translation/src/Tests/ContentTranslationMetadataFieldsTest.php b/core/modules/content_translation/src/Tests/ContentTranslationMetadataFieldsTest.php
index 437be68..2c15b67 100644
--- a/core/modules/content_translation/src/Tests/ContentTranslationMetadataFieldsTest.php
+++ b/core/modules/content_translation/src/Tests/ContentTranslationMetadataFieldsTest.php
@@ -118,7 +118,7 @@ public function testSetTranslatable() {
 
     // Create a new test entity with original values in the default language.
     $default_langcode = $this->langcodes[0];
-    $entity_id = $this->createEntity(['status' => FALSE], $default_langcode);
+    $entity_id = $this->createEntity(['title' => $this->randomString(), 'status' => FALSE], $default_langcode);
     $storage = $entity_manager->getStorage($this->entityTypeId);
     $storage->resetCache();
     $entity = $storage->load($entity_id);
diff --git a/core/modules/node/src/Tests/Migrate/d6/MigrateNodeTestBase.php b/core/modules/node/src/Tests/Migrate/d6/MigrateNodeTestBase.php
index f011a90..2e25140 100644
--- a/core/modules/node/src/Tests/Migrate/d6/MigrateNodeTestBase.php
+++ b/core/modules/node/src/Tests/Migrate/d6/MigrateNodeTestBase.php
@@ -82,6 +82,7 @@ protected function setUp() {
       'nid' => 1,
       'vid' => 1,
       'revision_log' => '',
+      'title' => $this->randomString(),
     ));
     $node->enforceIsNew();
     $node->save();
@@ -91,6 +92,7 @@ protected function setUp() {
       'nid' => 3,
       'vid' => 4,
       'revision_log' => '',
+      'title' => $this->randomString(),
     ));
     $node->enforceIsNew();
     $node->save();
diff --git a/core/modules/node/src/Tests/Views/NodeRevisionWizardTest.php b/core/modules/node/src/Tests/Views/NodeRevisionWizardTest.php
index 7e1209b..c121737 100644
--- a/core/modules/node/src/Tests/Views/NodeRevisionWizardTest.php
+++ b/core/modules/node/src/Tests/Views/NodeRevisionWizardTest.php
@@ -26,7 +26,7 @@ public function testViewAdd() {
     // Create two nodes with two revision.
     $node_storage = \Drupal::entityManager()->getStorage('node');
     /** @var \Drupal\node\NodeInterface $node */
-    $node = $node_storage->create(array('type' => 'article', 'created' => REQUEST_TIME + 40));
+    $node = $node_storage->create(array('title' => $this->randomString(), 'type' => 'article', 'created' => REQUEST_TIME + 40));
     $node->save();
 
     $node = $node->createDuplicate();
diff --git a/core/modules/options/src/Tests/Views/OptionsTestBase.php b/core/modules/options/src/Tests/Views/OptionsTestBase.php
index e203c50..fbe13b1 100644
--- a/core/modules/options/src/Tests/Views/OptionsTestBase.php
+++ b/core/modules/options/src/Tests/Views/OptionsTestBase.php
@@ -56,6 +56,7 @@ protected function setUp() {
 
     $settings = [];
     $settings['type'] = 'article';
+    $settings['title'] = $this->randomString();
     $settings['field_test_list_string'][]['value'] = $this->fieldValues[0];
     $settings['field_test_list_integer'][]['value'] = 0;
 
diff --git a/core/modules/shortcut/src/Entity/Shortcut.php b/core/modules/shortcut/src/Entity/Shortcut.php
index 108bbc9..ba6af78 100644
--- a/core/modules/shortcut/src/Entity/Shortcut.php
+++ b/core/modules/shortcut/src/Entity/Shortcut.php
@@ -132,7 +132,6 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setDescription(t('The name of the shortcut.'))
       ->setRequired(TRUE)
       ->setTranslatable(TRUE)
-      ->setDefaultValue('')
       ->setSetting('max_length', 255)
       ->setDisplayOptions('form', array(
         'type' => 'string_textfield',
diff --git a/core/modules/user/src/Entity/User.php b/core/modules/user/src/Entity/User.php
index 53155a0..077d3a1 100644
--- a/core/modules/user/src/Entity/User.php
+++ b/core/modules/user/src/Entity/User.php
@@ -460,10 +460,9 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
 
     // The name should not vary per language. The username is the visual
     // identifier for a user and needs to be consistent in all languages.
-    $fields['name'] = BaseFieldDefinition::create('string')
+    $fields['name'] = BaseFieldDefinition::create('user_name')
       ->setLabel(t('Name'))
       ->setDescription(t('The name of this user.'))
-      ->setDefaultValue('')
       ->setConstraints(array(
         // No Length constraint here because the UserName constraint also covers
         // that.
diff --git a/core/modules/user/src/Plugin/Field/FieldType/UserNameItem.php b/core/modules/user/src/Plugin/Field/FieldType/UserNameItem.php
new file mode 100644
index 0000000..16077aa
--- /dev/null
+++ b/core/modules/user/src/Plugin/Field/FieldType/UserNameItem.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\user\Plugin\Field\FieldType\UserNameItem.
+ */
+
+namespace Drupal\user\Plugin\Field\FieldType;
+
+use Drupal\Core\Field\Plugin\Field\FieldType\StringItem;
+
+/**
+ * Defines the 'string' entity field type.
+ *
+ * @FieldType(
+ *   id = "user_name",
+ *   label = @Translation("User name"),
+ *   description = @Translation("A field containing the name of a user."),
+ *   default_widget = "string_textfield",
+ *   default_formatter = "string",
+ *   no_ui = TRUE
+ * )
+ */
+class UserNameItem extends StringItem {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isEmpty() {
+    // Anonymous users do not store anything in the database.
+    if ($this->getEntity()->id() == 0) {
+      return $this->value === NULL;
+    }
+
+    return $this->value === NULL || $this->value === '';
+  }
+
+}
diff --git a/core/modules/user/user.install b/core/modules/user/user.install
index dd55b49..91a908e 100644
--- a/core/modules/user/user.install
+++ b/core/modules/user/user.install
@@ -70,6 +70,7 @@ function user_install() {
     ->create(array(
       'uid' => 0,
       'status' => 0,
+      'name' => '',
     ))
     ->save();
 
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 5f990ca..641db5e 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -133,6 +133,22 @@ function user_picture_enabled() {
 }
 
 /**
+ * Implements hook_field_widget_info_alter().
+ */
+function user_field_widget_info_alter(&$info) {
+  // Allow the 'user_name' field type to use the 'string_textfield' widget.
+  $info['string_textfield']['field_types'][] = 'user_name';
+}
+
+/**
+ * Implements hook_field_formatter_info_alter().
+ */
+function user_field_formatter_info_alter(array &$info) {
+  // Allow the 'user_name' field type to use the 'string' formatter.
+  $info['string']['field_types'][] = 'user_name';
+}
+
+/**
  * Implements hook_entity_extra_field_info().
  */
 function user_entity_extra_field_info() {
