diff --git a/core/modules/field_ui/config/field_ui.settings.yml b/core/modules/field_ui/config/field_ui.settings.yml
new file mode 100644
index 0000000..046f9a4
--- /dev/null
+++ b/core/modules/field_ui/config/field_ui.settings.yml
@@ -0,0 +1 @@
+field_prefix: field_
diff --git a/core/modules/field_ui/config/schema/field_ui.schema.yml b/core/modules/field_ui/config/schema/field_ui.schema.yml
new file mode 100644
index 0000000..fe7e95c
--- /dev/null
+++ b/core/modules/field_ui/config/schema/field_ui.schema.yml
@@ -0,0 +1,9 @@
+# Schema for configuration files of the Field UI module.
+
+field_ui.settings:
+  type: mapping
+  label: 'Field UI settings'
+  mapping:
+    field_prefix:
+      type: string
+      label: 'The prefix for new fields created via Field UI'
diff --git a/core/modules/field_ui/field_ui.install b/core/modules/field_ui/field_ui.install
index 8ce3e2c..f201ed6 100644
--- a/core/modules/field_ui/field_ui.install
+++ b/core/modules/field_ui/field_ui.install
@@ -43,3 +43,14 @@ function field_ui_update_8001() {
     }
   }
 }
+
+/**
+ * Moves field_prefix to config.
+ *
+ * @ingroup config_upgrade
+ */
+function field_ui_update_8002() {
+  update_variables_to_config('field_ui.settings', array(
+    'field_prefix' => 'field_prefix',
+  ));
+}
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php b/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
index f02e2eb..8e3a6bf 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
@@ -8,6 +8,7 @@
 namespace Drupal\field_ui;
 
 use Drupal\field_ui\OverviewBase;
+use Drupal\field\Plugin\Core\Entity\Field;
 
 /**
  * Field UI field overview form.
@@ -204,6 +205,9 @@ public function buildForm(array $form, array &$form_state, $entity_type = NULL,
       );
     }
 
+    // Field prefix.
+    $field_prefix = config('field_ui.settings')->get('field_prefix');
+
     // Additional row: add new field.
     $max_weight = field_info_max_weight($this->entity_type, $this->bundle, 'form');
     $field_type_options = field_ui_field_type_options();
@@ -254,12 +258,13 @@ public function buildForm(array $form, array &$form_state, $entity_type = NULL,
           '#title' => t('New field name'),
           '#title_display' => 'invisible',
           // This field should stay LTR even for RTL languages.
-          '#field_prefix' => '<span dir="ltr">field_',
+          '#field_prefix' => '<span dir="ltr">' . $field_prefix,
           '#field_suffix' => '</span>&lrm;',
           '#size' => 15,
           '#description' => t('A unique machine-readable name containing letters, numbers, and underscores.'),
-          // 32 characters minus the 'field_' prefix.
-          '#maxlength' => 26,
+          // Calculate characters depending on the length of the field prefix
+          // setting. Maximum length is 32.
+          '#maxlength' => Field::ID_MAX_LENGTH - strlen($field_prefix),
           '#prefix' => '<div class="add-new-placeholder">&nbsp;</div>',
           '#machine_name' => array(
             'source' => array('fields', $name, 'label'),
@@ -448,8 +453,8 @@ protected function validateAddNew(array $form, array &$form_state) {
       else {
         $field_name = $field['field_name'];
 
-        // Add the 'field_' prefix.
-        $field_name = 'field_' . $field_name;
+        // Add the field prefix.
+        $field_name = config('field_ui.settings')->get('field_prefix') . $field_name;
         form_set_value($form['fields']['_add_new_field']['field_name'], $field_name, $form_state);
       }
 
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php b/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php
index 896f244..79c3714 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php
@@ -239,6 +239,36 @@ function assertFieldSettings($bundle, $field_name, $string = 'dummy test string'
   }
 
   /**
+   * Tests that the 'field_prefix' setting works on Field UI.
+   */
+  function testFieldPrefix() {
+    // Change default field prefix.
+    $field_prefix = strtolower($this->randomName(10));
+    \Drupal::config('field_ui.settings')->set('field_prefix', $field_prefix)->save();
+
+    // Create a field input and label exceeding the new maxlength, which is 22.
+    $field_exceed_max_length_label = $this->randomString(23);
+    $field_exceed_max_length_input = $this->randomName(23);
+
+    // Try to create the field.
+    $edit = array(
+      'fields[_add_new_field][label]' => $field_exceed_max_length_label,
+      'fields[_add_new_field][field_name]' => $field_exceed_max_length_input,
+    );
+    $this->drupalPost('admin/structure/types/manage/' . $this->type . '/fields', $edit, t('Save'));
+    $this->assertText('New field name cannot be longer than 22 characters but is currently 23 characters long.');
+
+    // Create a valid field.
+    $edit = array(
+      'fields[_add_new_field][label]' => $this->field_label,
+      'fields[_add_new_field][field_name]' => $this->field_name_input,
+    );
+    $this->fieldUIAddNewField('admin/structure/types/manage/' . $this->type, $edit);
+    $this->drupalGet('admin/structure/types/manage/' . $this->type . '/fields/node.' . $this->type . '.' . $field_prefix . $this->field_name_input);
+    $this->assertText(format_string('@label settings for @type', array('@label' => $this->field_label, '@type' => $this->type)));
+  }
+
+  /**
    * Tests that default value is correctly validated and saved.
    */
   function testDefaultValue() {
