diff --git a/mysql-test/r/ndb_restore_print.result b/mysql-test/r/ndb_restore_print.result
index b50a2f5c90b04bb5f8801479b53e848be3efaf39..e05f8e43d1a24b1dc474d75c4311b38da4a551a0 100644
--- a/mysql-test/r/ndb_restore_print.result
+++ b/mysql-test/r/ndb_restore_print.result
@@ -298,6 +298,24 @@ t4
 4	34
 5	35
 drop table t1;
+create table t1
+(pk int key
+,a1 MEDIUMINT, a2 MEDIUMINT UNSIGNED
+) engine ndb;
+insert into t1 values(1, 8388607, 16777215);
+insert into t1 values(2, -8388608, 0);
+insert into t1 values(3, -1, 1);
+CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info (id INT, backup_id INT) ENGINE = HEAP;
+DELETE FROM test.backup_info;
+LOAD DATA INFILE '../tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
+SELECT @the_backup_id:=backup_id FROM test.backup_info;
+@the_backup_id:=backup_id
+<the_backup_id>
+DROP TABLE test.backup_info;
+1;8388607;16777215
+2;-8388608;0
+3;-1;1
+drop table t1;
 drop table t2;
 drop table t3;
 drop table t4;
diff --git a/mysql-test/t/ndb_restore_print.test b/mysql-test/t/ndb_restore_print.test
index 66ad83a84a6d81326e64a737d182dcd5540e1e1c..6dbbfdf59335193f72753b5df0441841115c7d78 100644
--- a/mysql-test/t/ndb_restore_print.test
+++ b/mysql-test/t/ndb_restore_print.test
@@ -161,6 +161,27 @@ insert into t4 values (1,31),(2,32),(3,33),(4,34),(5,35);
 --exec rm -f $MYSQLTEST_VARDIR/tmp/t3.txt
 --exec rm -f $MYSQLTEST_VARDIR/tmp/t4.txt
 
+# now test some other datatypes
+drop table t1;
+create table t1
+ (pk int key
+  ,a1 MEDIUMINT, a2 MEDIUMINT UNSIGNED
+ ) engine ndb;
+
+# max values
+insert into t1 values(1, 8388607, 16777215);
+# min values
+insert into t1 values(2, -8388608, 0);
+# small values
+insert into t1 values(3, -1, 1);
+
+# backup and print
+--source include/ndb_backup.inc
+
+--let ndb_restore_filter=test t1
+--let ndb_restore_opts=--verbose=0 --print_data --hex --fields-terminated-by=";"
+--source include/ndb_backup_print.inc
+
 # clean up
 drop table t1;
 drop table t2;
diff --git a/ndb/include/ndbapi/NdbRecAttr.hpp b/ndb/include/ndbapi/NdbRecAttr.hpp
index 159c7e7ce77803ab5f24f0ab1495d8e85fb0ebff..2f3a2c8383a09de8e73b1bad7870777637cc6154 100644
--- a/ndb/include/ndbapi/NdbRecAttr.hpp
+++ b/ndb/include/ndbapi/NdbRecAttr.hpp
@@ -145,6 +145,13 @@ public:
    */   
   Int32 int32_value() const;  
 
+  /**
+   * Get value stored in NdbRecAttr object.
+   * 
+   * @return  Medium value.
+   */
+  Int32 medium_value() const;
+
   /**
    * Get value stored in NdbRecAttr object.
    *
@@ -173,6 +180,13 @@ public:
    */
   Uint32 u_32_value() const;          
 
+  /**
+   * Get value stored in NdbRecAttr object.
+   * 
+   * @return  Unsigned medium value.
+   */
+  Uint32 u_medium_value() const;
+
   /**
    * Get value stored in NdbRecAttr object.
    * 
@@ -318,6 +332,16 @@ NdbRecAttr::int32_value() const
   return *(Int32*)theRef;
 }
 
+inline
+Int32
+NdbRecAttr::medium_value() const
+{
+  Uint32 tmp = *(Uint32*)theRef;
+  if (tmp & (0x1<<23))
+    tmp|= (0xFF<<24);
+  return (Int32)tmp;
+}
+
 inline
 short
 NdbRecAttr::short_value() const
@@ -339,6 +363,13 @@ NdbRecAttr::u_32_value() const
   return *(Uint32*)theRef;
 }
 
+inline
+Uint32
+NdbRecAttr::u_medium_value() const
+{
+  return *(Uint32*)theRef;
+}
+
 inline
 Uint16
 NdbRecAttr::u_short_value() const
diff --git a/ndb/src/ndbapi/NdbRecAttr.cpp b/ndb/src/ndbapi/NdbRecAttr.cpp
index 2577151e256632f5fb28a4144c7c380e195e42fe..a0c394603c59745345178a4c11ba266652a07452 100644
--- a/ndb/src/ndbapi/NdbRecAttr.cpp
+++ b/ndb/src/ndbapi/NdbRecAttr.cpp
@@ -265,6 +265,9 @@ ndbrecattr_print_formatted(NdbOut& out, const NdbRecAttr &r,
       if (length > 1)
         out << f.end_array_enclosure;
       break;
+    case NdbDictionary::Column::Mediumunsigned:
+      out << r.u_medium_value();
+      break;
     case NdbDictionary::Column::Smallunsigned:
       out << r.u_short_value();
       break;
@@ -277,6 +280,9 @@ ndbrecattr_print_formatted(NdbOut& out, const NdbRecAttr &r,
     case NdbDictionary::Column::Int:
       out << r.int32_value();
       break;
+    case NdbDictionary::Column::Mediumint:
+      out << r.medium_value();
+      break;
     case NdbDictionary::Column::Smallint:
       out << r.short_value();
       break;
@@ -463,8 +469,6 @@ ndbrecattr_print_formatted(NdbOut& out, const NdbRecAttr &r,
     break;
 
     case NdbDictionary::Column::Undefined:
-    case NdbDictionary::Column::Mediumint:
-    case NdbDictionary::Column::Mediumunsigned:
     unknown:
     //default: /* no print functions for the rest, just print type */
     out << (int) r.getType();