]> git.joonet.de Git - adminer.git/commitdiff
MySQL: Use utf8mb4 in export only if required
authorJakub Vrana <jakub@vrana.cz>
Fri, 6 Mar 2015 17:36:20 +0000 (09:36 -0800)
committerJakub Vrana <jakub@vrana.cz>
Fri, 6 Mar 2015 17:36:20 +0000 (09:36 -0800)
adminer/dump.inc.php
adminer/include/adminer.inc.php
adminer/include/editing.inc.php
adminer/include/version.inc.php
changes.txt

index 67032522f73275a5ca427da0532bb2e52c105235..7af973a5094c2d22b053745e7361b3be696c8c81 100644 (file)
@@ -16,7 +16,7 @@ if ($_POST && !$error) {
        if ($is_sql) {
                echo "-- Adminer $VERSION " . $drivers[DRIVER] . " dump\n\n";
                if ($jush == "sql") {
-                       echo "SET NAMES " . charset($connection) . ";
+                       echo "SET NAMES utf8;
 SET time_zone = '+00:00';
 " . ($_POST["data_style"] ? "SET foreign_key_checks = 0;
 SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
@@ -39,6 +39,7 @@ SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
                $adminer->dumpDatabase($db);
                if ($connection->select_db($db)) {
                        if ($is_sql && preg_match('~CREATE~', $style) && ($create = $connection->result("SHOW CREATE DATABASE " . idf_escape($db), 1))) {
+                               set_utf8mb4($create);
                                if ($style == "DROP+CREATE") {
                                        echo "DROP DATABASE IF EXISTS " . idf_escape($db) . ";\n";
                                }
@@ -53,16 +54,18 @@ SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
                                if ($_POST["routines"]) {
                                        foreach (array("FUNCTION", "PROCEDURE") as $routine) {
                                                foreach (get_rows("SHOW $routine STATUS WHERE Db = " . q($db), null, "-- ") as $row) {
-                                                       $out .= ($style != 'DROP+CREATE' ? "DROP $routine IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "")
-                                                       . remove_definer($connection->result("SHOW CREATE $routine " . idf_escape($row["Name"]), 2)) . ";;\n\n";
+                                                       $create = remove_definer($connection->result("SHOW CREATE $routine " . idf_escape($row["Name"]), 2));
+                                                       set_utf8mb4($create);
+                                                       $out .= ($style != 'DROP+CREATE' ? "DROP $routine IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "") . "$create;;\n\n";
                                                }
                                        }
                                }
 
                                if ($_POST["events"]) {
                                        foreach (get_rows("SHOW EVENTS", null, "-- ") as $row) {
-                                               $out .= ($style != 'DROP+CREATE' ? "DROP EVENT IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "")
-                                               . remove_definer($connection->result("SHOW CREATE EVENT " . idf_escape($row["Name"]), 3)) . ";;\n\n";
+                                               $create = remove_definer($connection->result("SHOW CREATE EVENT " . idf_escape($row["Name"]), 3));
+                                               set_utf8mb4($create);
+                                               $out .= ($style != 'DROP+CREATE' ? "DROP EVENT IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "") . "$create;;\n\n";
                                        }
                                }
 
index 4ef6ab449aab725933c01f0abade5165efb7e663..f02455c5e7b58ecd1511d980b612ba78df2b8b56 100644 (file)
@@ -637,7 +637,7 @@ username.form['auth[driver]'].onchange();
                        if ($style) {
                                dump_csv(array_keys(fields($table)));
                        }
-               } elseif ($style) {
+               } else {
                        if ($is_view == 2) {
                                $fields = array();
                                foreach (fields($table) as $name => $field) {
@@ -647,7 +647,8 @@ username.form['auth[driver]'].onchange();
                        } else {
                                $create = create_sql($table, $_POST["auto_increment"]);
                        }
-                       if ($create) {
+                       set_utf8mb4($create);
+                       if ($style && $create) {
                                if ($style == "DROP+CREATE" || $is_view == 1) {
                                        echo "DROP " . ($is_view == 2 ? "VIEW" : "TABLE") . " IF EXISTS " . table($table) . ";\n";
                                }
index dc5efabb510520c74b75f3ec9ec3dc41bc18e4c4..f5e27e390787175564a189a7152edda77e82ce74 100644 (file)
@@ -523,3 +523,15 @@ function db_size($db) {
        }
        return format_number($return);
 }
+
+/** Print SET NAMES if utf8mb4 might be needed
+* @param string
+* @return null
+*/
+function set_utf8mb4($create) {
+       static $set = false;
+       if (!$set && preg_match('~\butf8mb4~i', $create)) { // possible false positive
+               $set = true;
+               echo "SET NAMES utf8mb4;\n\n";
+       }
+}
index e6fbc38cb5fbe768b70a3cedb11b4682ea28f464..ec06829a2cc024f970d15a5b10e2297621cd377c 100644 (file)
@@ -1,2 +1,2 @@
 <?php
-$VERSION = "4.2.0";
+$VERSION = "4.2.1-dev";
index 85726d05802e9ffabdb4e8f073f5f974834fd162..db588afbbbe7cd0a538d073aae5b17b17eba4052 100644 (file)
@@ -1,4 +1,7 @@
-Adminer 4.2.0 (released 2015-02-07)
+Adminer 4.2.1-dev:
+MySQL: Use utf8mb4 in export only if required
+
+Adminer 4.2.0 (released 2015-02-07):
 Fix XSS in login form (bug #436)
 Allow limiting number of displayed rows in SQL command
 Fix reading routine column collations
@@ -21,7 +24,7 @@ Elasticsearch: Use where in select
 Firebird: Alpha version
 Danish translation
 
-Adminer 4.1.0 (released 2014-04-18)
+Adminer 4.1.0 (released 2014-04-18):
 Provide size of all databases in the overview
 Prevent against brute force login attempts from the same IP address
 Compute number of tables in the overview explicitly