diff --git a/includes/sources.db.mysql.inc b/includes/sources.db.mysql.inc
index f972281..a4ebdb0 100644
--- a/includes/sources.db.mysql.inc
+++ b/includes/sources.db.mysql.inc
@@ -371,13 +371,26 @@ class backup_migrate_source_db_mysql extends backup_migrate_source_db {
     // Escape backslashes, PHP code, special chars
     $search = array('\\', "'", "\x00", "\x0a", "\x0d", "\x1a");
     $replace = array('\\\\', "''", '\0', '\n', '\r', '\Z');
+    $no_mb_detect_encoding = !function_exists('mb_detect_encoding');
   
     $line = array();
     foreach ($data as $row) {
       // DB Escape the values.
       $items = array();
       foreach ($row as $key => $value) {
-        $items[] = is_null($value) ? "null" : "'". str_replace($search, $replace, $value) ."'";
+        if (is_null($value)) {
+          $items[] = 'null';
+        } elseif (ctype_digit($value) && ($value[0] !== '0' || $value === '0')) {
+          $items[] = $value;
+        } else {
+          $escaped_value = str_replace($search, $replace, $value);
+          $valid_value = $no_mb_detect_encoding || mb_detect_encoding($escaped_value, 'utf-8', TRUE) !== FALSE;
+          if ($valid_value) {
+            $items[] = "'" . $escaped_value . "'";
+          } else {
+            $items[] = '0x' . bin2hex($value);
+          }
+        }
       }
   
       // If there is a row to be added.
