diff --git a/innobase/include/data0type.ic b/innobase/include/data0type.ic
index 47f35bdce67fd4af7423b82ca56c79c3bb06048a..e63dde98974a1fa7bc628b9f5aba0d1926e7659b 100644
--- a/innobase/include/data0type.ic
+++ b/innobase/include/data0type.ic
@@ -354,6 +354,7 @@ dtype_get_fixed_size(
 	case DATA_INT:
 	case DATA_FLOAT:
 	case DATA_DOUBLE:
+			return(dtype_get_len(type));
 	case DATA_MYSQL:
 			if (type->prtype & DATA_BINARY_TYPE) {
 				return(dtype_get_len(type));
@@ -438,6 +439,7 @@ dtype_get_min_size(
 	case DATA_INT:
 	case DATA_FLOAT:
 	case DATA_DOUBLE:
+			return(type->len);
 	case DATA_MYSQL:
 			if ((type->prtype & DATA_BINARY_TYPE)
 					|| type->mbminlen == type->mbmaxlen) {
@@ -446,6 +448,7 @@ dtype_get_min_size(
 			/* this is a variable-length character set */
 			ut_a(type->mbminlen > 0);
 			ut_a(type->mbmaxlen > type->mbminlen);
+			ut_a(type->len % type->mbmaxlen == 0);
 			return(type->len * type->mbminlen / type->mbmaxlen);
 	case DATA_VARCHAR:
 	case DATA_BINARY:
diff --git a/innobase/row/row0sel.c b/innobase/row/row0sel.c
index 84a160cfc0d1efb68766f3f4981384ec3b2b081d..22cece487a04ebc62f29009b3e76c6a063b320e9 100644
--- a/innobase/row/row0sel.c
+++ b/innobase/row/row0sel.c
@@ -2233,7 +2233,9 @@ row_sel_field_store_in_mysql_format(
 			are not in themselves stored here: the caller must
 			allocate and copy the BLOB into buffer before, and pass
 			the pointer to the BLOB in 'data' */
-	const mysql_row_templ_t* templ,	/* in: MySQL column template */
+	const mysql_row_templ_t* templ,	/* in: MySQL column template.
+			Its following fields are referenced:
+			type, is_unsigned, mysql_col_len, mbminlen, mbmaxlen */
 	byte*	data,	/* in: data to store */
 	ulint	len)	/* in: length of the data */
 {
@@ -2280,16 +2282,17 @@ row_sel_field_store_in_mysql_format(
 
 		row_mysql_store_blob_ref(dest, templ->mysql_col_len,
 							data, len);
-	} else {
+	} else if (templ->type == DATA_MYSQL) {
 		memcpy(dest, data, len);
 
-		ut_ad(templ->mysql_col_len >= len);
-		ut_ad(templ->mbmaxlen >= templ->mbminlen);
+		ut_a(templ->mysql_col_len >= len);
+		ut_a(templ->mbmaxlen >= templ->mbminlen);
 
-		ut_ad(templ->mbmaxlen > templ->mbminlen
+		ut_a(templ->mbmaxlen > templ->mbminlen
 			|| templ->mysql_col_len == len);
-		ut_ad(!templ->mbmaxlen
+		ut_a(!templ->mbmaxlen
 			|| !(templ->mysql_col_len % templ->mbmaxlen));
+		ut_a(len * templ->mbmaxlen >= templ->mysql_col_len);
 
 		if (templ->mbminlen != templ->mbmaxlen) {
 			/* Pad with spaces.  This undoes the stripping
@@ -2297,6 +2300,16 @@ row_sel_field_store_in_mysql_format(
 			row_mysql_store_col_in_innobase_format(). */
 			memset(dest + len, 0x20, templ->mysql_col_len - len);
 		}
+	} else {
+		ut_a(templ->type == DATA_CHAR
+			|| templ->type == DATA_FIXBINARY
+			/*|| templ->type == DATA_SYS_CHILD
+			|| templ->type == DATA_SYS*/
+			|| templ->type == DATA_FLOAT
+			|| templ->type == DATA_DOUBLE
+			|| templ->type == DATA_DECIMAL);
+		ut_ad(templ->mysql_col_len == len);
+		memcpy(dest, data, len);
 	}
 }