diff --git a/core/modules/locale/locale.install b/core/modules/locale/locale.install
index 0755104..4a4b674 100644
--- a/core/modules/locale/locale.install
+++ b/core/modules/locale/locale.install
@@ -61,7 +61,7 @@ function locale_schema() {
       ),
       'source' => array(
         'type' => 'text',
-        'mysql_type' => 'blob',
+        'binary' => TRUE,
         'not null' => TRUE,
         'description' => 'The original string in English.',
       ),
@@ -97,7 +97,7 @@ function locale_schema() {
       ),
       'translation' => array(
         'type' => 'text',
-        'mysql_type' => 'blob',
+        'binary' => TRUE,
         'not null' => TRUE,
         'description' => 'Translation string value in this language.',
       ),
@@ -294,3 +294,33 @@ function locale_requirements($phase) {
   }
   return $requirements;
 }
+
+/**
+ * Fixes an error in the definition of locale_source and locales_target
+ * where specific MySQL attributes where being used.
+ */
+function locale_update_8001() {
+
+  $schema = locale_schema();
+
+  $transaction = db_transaction();
+
+  try {
+
+    $fields = array(
+      'locales_source' => 'source',
+      'locales_target' => 'translation',
+      );
+
+    foreach ($fields as $table => $column ) {
+      $spec = $schema[$table]['fields'][$column];
+      db_change_field($table, $column, $column, $spec);
+    }
+  }
+  catch (\Exception $e) {
+    $transaction->rollback();
+    throw $e;
+  }
+
+  return t('Locale columns updated.');
+}
diff --git a/core/modules/system/src/Tests/Database/SchemaTest.php b/core/modules/system/src/Tests/Database/SchemaTest.php
index e6aea74..59eff58 100644
--- a/core/modules/system/src/Tests/Database/SchemaTest.php
+++ b/core/modules/system/src/Tests/Database/SchemaTest.php
@@ -793,4 +793,99 @@ public function testFindTables() {
     Database::setActiveConnection('default');
   }
 
+    /**
+   * Performs a count query over the predefined result set
+   * and verifies that the number of results matches.
+   * 
+   * @param mixed[] $results 
+   * 
+   * @param string $type 
+   *   Can either be:
+   *     "CS_AS" -> Case sensitive / Accent sensitive
+   *     "CI_AI" -> Case insensitive / Accent insesitive
+   *     "CI_AS" -> Case insensitive / Accent sensitive
+   */
+  private function testAddChangeWithBinarySearchHelper(array $results, $type) {
+    foreach ($results as $search => $result) {
+      // By default, datase collation
+      // should be case insensitive returning both rows.
+      $count = db_query('SELECT COUNT(*) FROM {test_table_binary} WHERE name = :name', array(':name' => $search))->fetchField();
+      $this->assertEqual($count, $result[$type], 'Returned the correct number of total rows.');
+    }
+  }
+
+  /**
+   * Test db_add_field() and db_change_field() with binary spec.
+   */
+  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'),
+    );
+
+    db_create_table('test_table_binary', $table_spec);
+
+    $samples = array("Sandra", "sandra", "sÁndra");
+    
+    foreach ($samples as $sample) {
+      db_insert('test_table_binary')
+        ->fields(array(
+          'name' => $sample,
+        ))->execute();
+    }
+
+    // Strings to be tested.
+    $results = array(
+      "SaNDRa" => array("CS_AS" => 0, "CI_AI" => 3, "CI_AS" => 2),
+      "SÁNdRA" => array("CS_AS" => 0, "CI_AI" => 3, "CI_AS" => 1),
+      "SANDRA" => array("CS_AS" => 0, "CI_AI" => 3, "CI_AS" => 2),
+      "sandra" => array("CS_AS" => 1, "CI_AI" => 3, "CI_AS" => 2),
+      "Sandra" => array("CS_AS" => 1, "CI_AI" => 3, "CI_AS" => 2),
+      "sÁndra" => array("CS_AS" => 1, "CI_AI" => 3, "CI_AS" => 1),
+      "pedro" => array("CS_AS" => 0, "CI_AI" => 0, "CI_AS" => 0),
+      );
+    
+    // Test case insensitive.
+    $this->testAddChangeWithBinarySearchHelper($results, "CI_AI");
+
+    // Now let's change the field
+    // to case sensistive / accent sensitive.
+    db_change_field('test_table_binary', 'name', 'name', array(
+          'type' => 'varchar',
+          'length' => 255,
+          'binary' => true
+        ));
+    
+    // Test case sensitive.
+    $this->testAddChangeWithBinarySearchHelper($results, "CS_AS");
+
+    // Let's make this even harder, convert to BLOB and back to text.
+    // Blob is binary so works like CS/AS
+    db_change_field('test_table_binary', 'name', 'name', array(
+      'type' => 'blob',
+    ));
+
+    // Test case sensitive. Varbinary behaves as Case Insensitive / Accent Sensitive.
+    $this->testAddChangeWithBinarySearchHelper($results, "CI_AS");
+
+    // Back to Case Insensitive / Accent Insensitive
+    db_change_field('test_table_binary', 'name', 'name', array(
+          'type' => 'varchar',
+          'length' => 255,
+        ));
+
+    // Test case insensitive.
+    $this->testAddChangeWithBinarySearchHelper($results, "CI_AI");
+
+  }
 }
