--- mysql-5.6.21/plugin/innodb_memcached/innodb_memcache/src/innodb_api.c +++ mysql-5.6.21/plugin/innodb_memcached/innodb_memcache/src/innodb_api.c @@ -1589,7 +1589,9 @@ meta_column_t* col_info = meta_info->col_info; ib_crsr_t srch_crsr = cursor_data->crsr; char* before_val; + uint64_t before_val_int; unsigned int before_len; + bool before_is_str; int column_used = 0; ENGINE_ERROR_CODE ret = ENGINE_SUCCESS; @@ -1641,9 +1643,13 @@ before_len = result.extra_col_value[column_used].value_len; before_val = result.extra_col_value[column_used].value_str; + before_val_int = result.extra_col_value[column_used].value_int; + before_is_str = result.extra_col_value[column_used].is_str; } else { before_len = result.col_value[MCI_COL_VALUE].value_len; before_val = result.col_value[MCI_COL_VALUE].value_str; + before_val_int = result.col_value[MCI_COL_VALUE].value_int; + before_is_str = result.col_value[MCI_COL_VALUE].is_str; column_used = UPDATE_ALL_VAL_COL; } @@ -1654,8 +1660,14 @@ errno = 0; - if (before_val) { - value = strtoull(before_val, &end_ptr, 10); + if (before_len != 0) { + if (before_is_str) { + if (before_val) { + value = strtoull(before_val, &end_ptr, 10); + } + } else { + value = before_val_int; + } } if (errno == ERANGE) {