MDL-37284 fix mysql test for unicode compatibility
authorPetr Škoda <commits@skodak.org>
Sat, 22 Dec 2012 17:42:55 +0000 (18:42 +0100)
committerPetr Škoda <commits@skodak.org>
Sat, 22 Dec 2012 17:42:55 +0000 (18:42 +0100)
lib/dml/mysqli_native_moodle_database.php

index fa823e8..0127895 100644 (file)
@@ -803,45 +803,24 @@ class mysqli_native_moodle_database extends moodle_database {
     }
 
     /**
-     * Is db in unicode mode?
+     * Is this database compatible with utf8?
      * @return bool
      */
     public function setup_is_unicodedb() {
-        $sql = "SHOW LOCAL VARIABLES LIKE 'character_set_database'";
-        $this->query_start($sql, null, SQL_QUERY_AUX);
-        $result = $this->mysqli->query($sql);
-        $this->query_end($result);
-
-        $return = false;
-        if ($result) {
-            while($row = $result->fetch_assoc()) {
-                if (isset($row['Value'])) {
-                    $return = (strtoupper($row['Value']) === 'UTF8' or strtoupper($row['Value']) === 'UTF-8');
-                }
-                break;
-            }
-            $result->close();
-        }
-
-        if (!$return) {
-            return false;
-        }
+        // All new tables are created with this collation, we just have to make sure it is utf8 compatible,
+        // if config table already exists it has this collation too.
+        $collation = $this->get_dbcollation();
 
-        $sql = "SHOW LOCAL VARIABLES LIKE 'collation_database'";
-        $this->query_start($sql, null, SQL_QUERY_AUX);
+        $sql = "SHOW COLLATION WHERE Collation ='$collation' AND Charset = 'utf8'";
+        $this->query_start($sql, NULL, SQL_QUERY_AUX);
         $result = $this->mysqli->query($sql);
         $this->query_end($result);
-
-        $return = false;
-        if ($result) {
-            while($row = $result->fetch_assoc()) {
-                if (isset($row['Value'])) {
-                    $return = (strpos($row['Value'], 'latin1') !== 0);
-                }
-                break;
-            }
-            $result->close();
+        if ($result->fetch_assoc()) {
+            $return = true;
+        } else {
+            $return = false;
         }
+        $result->close();
 
         return $return;
     }