diff --git a/core/modules/locale/locale.install b/core/modules/locale/locale.install
index 4c49c3c1bc..0b1f3f4779 100644
--- a/core/modules/locale/locale.install
+++ b/core/modules/locale/locale.install
@@ -5,6 +5,7 @@
  * Install, update, and uninstall functions for the Locale module.
  */
 
+use Drupal\Core\Database\Database;
 use Drupal\Core\Url;
 
 /**
@@ -61,7 +62,7 @@ function locale_schema() {
       ],
       'source' => [
         'type' => 'text',
-        'mysql_type' => 'blob',
+        'binary' => TRUE,
         'not null' => TRUE,
         'description' => 'The original string in English.',
       ],
@@ -97,7 +98,7 @@ function locale_schema() {
       ],
       'translation' => [
         'type' => 'text',
-        'mysql_type' => 'blob',
+        'binary' => TRUE,
         'not null' => TRUE,
         'description' => 'Translation string value in this language.',
       ],
@@ -316,3 +317,35 @@ function locale_update_8500() {
       ->save();
   }
 }
+
+/**
+ * Fixes an error in the definition of locale_source and locales_target
+ * where specific MySQL attributes where being used.
+ */
+function locale_update_8501() {
+
+  $schema = locale_schema();
+
+  $transaction = Database::getConnection('default')
+    ->startTransaction();
+
+  try {
+
+    $fields = array(
+      'locales_source' => 'source',
+      'locales_target' => 'translation',
+      );
+
+    foreach ($fields as $table => $column ) {
+      $spec = $schema[$table]['fields'][$column];
+      Database::getConnection()->schema()
+        ->changeField($table, $column, $column, $spec);
+    }
+  }
+  catch (\Exception $e) {
+      $transaction->rollback();
+      throw $e;
+  }
+
+  return t('Locale columns updated.');
+}
diff --git a/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php b/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
index e239098715..2145418976 100644
--- a/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
@@ -868,4 +868,83 @@ protected function assertPrimaryKeyColumns($table_name, array $primary_key = [])
     }
   }
 
+  /**
+   * Performs a count query over the predefined result set
+   * and verifies that the number of results matches.
+   *
+   * @param mixed[] $results
+   *
+   * @param string $type
+   *   Possible options:
+   *     'CS' -> Case sensitive
+   *     'CI' -> Case insensitive
+   */
+  public function testAddChangeWithBinarySearchHelper(array $results = [], $type = 'unknown') {
+    foreach ($results as $search => $result) {
+      // By default, datase collation
+      // should be case insensitive returning both rows.
+      $count = Database::getConnection()->select('test_table_binary', 'b')
+        ->condition('name', $search)
+        ->countQuery()
+        ->execute()
+        ->fetchField();
+      $this->assertEquals($result[$type], $count,
+        'Returned the correct number of total rows for ' . $search . ' of type ' . $type .  '.');
+    }
+  }
+
+  /**
+   * Test case-sensitive and case-insensitive string comparison.
+   */
+  public function testAddChangeWithBinary() {
+    $table_spec = array(
+      'fields' => array(
+        'id'  => array(
+          'type' => 'serial',
+          'not null' => TRUE,
+        ),
+        'name' => array(
+          'type' => 'varchar',
+          'length' => 255,
+          'binary' => FALSE,
+        ),
+      ),
+      'primary key' => array('id'),
+    );
+
+    $connection = Database::getConnection();
+    $connection->schema()->createTable('test_table_binary', $table_spec);
+
+    $samples = array('Sandra', 'sandra');
+
+    foreach ($samples as $sample) {
+      $connection->insert('test_table_binary')
+        ->fields(array('name' => $sample))
+        ->execute();
+    }
+
+    // Strings to be tested.
+    $results = array(
+      'SaNDRa' => array('CS' => 0, 'CI' => 2),
+      'SANDRA' => array('CS' => 0, 'CI' => 2),
+      'sandra' => array('CS' => 1, 'CI' => 2),
+      'Sandra' => array('CS' => 1, 'CI' => 2),
+      'pedro' => array('CS' => 0, 'CI' => 0),
+    );
+
+    // Test case insensitive.
+    $this->testAddChangeWithBinarySearchHelper($results, 'CI');
+
+    // Change field to case sensitive.
+    $connection->schema()->changeField('test_table_binary',
+      'name', 'name', array(
+        'type' => 'varchar',
+        'length' => 255,
+        'binary' => TRUE,
+      ));
+
+    // Test case sensitive.
+    $this->testAddChangeWithBinarySearchHelper($results, 'CS');
+
+  }
 }
