From 5f07200ad265213c35d87738f4284059509d96e9 Mon Sep 17 00:00:00 2001
From: mfb <mfb@12302.no-reply.drupal.org>
Date: Tue, 2 Aug 2011 12:44:15 -0700
Subject: [PATCH] Issue #1237252 by mfb, catch, bfroehle, makara: DB Case
 Sensitivity: Allow BINARY attribute in MySQL.

---
 includes/database/mysql/schema.inc |    9 +++++++--
 includes/database/schema.inc       |    3 +++
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/includes/database/mysql/schema.inc b/includes/database/mysql/schema.inc
index 4e88fa1..d0f4259 100644
--- a/includes/database/mysql/schema.inc
+++ b/includes/database/mysql/schema.inc
@@ -131,8 +131,13 @@ class DatabaseSchema_mysql extends DatabaseSchema {
   protected function createFieldSql($name, $spec) {
     $sql = "`" . $name . "` " . $spec['mysql_type'];
 
-    if (in_array($spec['mysql_type'], array('VARCHAR', 'CHAR', 'TINYTEXT', 'MEDIUMTEXT', 'LONGTEXT', 'TEXT')) && isset($spec['length'])) {
-      $sql .= '(' . $spec['length'] . ')';
+    if (in_array($spec['mysql_type'], array('VARCHAR', 'CHAR', 'TINYTEXT', 'MEDIUMTEXT', 'LONGTEXT', 'TEXT'))) {
+      if (isset($spec['length'])) {
+        $sql .= '(' . $spec['length'] . ')';
+      }
+      if (!empty($spec['binary'])) {
+        $sql .= ' BINARY';
+      }
     }
     elseif (isset($spec['precision']) && isset($spec['scale'])) {
       $sql .= '(' . $spec['precision'] . ', ' . $spec['scale'] . ')';
diff --git a/includes/database/schema.inc b/includes/database/schema.inc
index de1b2f5..69c19c5 100644
--- a/includes/database/schema.inc
+++ b/includes/database/schema.inc
@@ -76,6 +76,9 @@ require_once dirname(__FILE__) . '/query.inc';
  *       the precision (total number of significant digits) and scale
  *       (decimal digits right of the decimal point). Both values are
  *       mandatory. Ignored for other field types.
+ *     - 'binary': For type 'char', 'varchar' or 'text' fields on MySQL, forces
+ *       a case-sensitive binary collation. This has no effect on other database
+ *       types for which case sensitivity is already the default behavior.
  *     All parameters apart from 'type' are optional except that type
  *     'numeric' columns must specify 'precision' and 'scale'.
  *  - 'primary key': An array of one or more key column specifiers (see below)
-- 
1.7.6

