diff --git a/sql/sql_table.cc b/sql/sql_table.cc index e86ebba561288..32e371b1ba292 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -3067,11 +3067,10 @@ my_bool init_key_info(THD *thd, Alter_info *alter_info, if (is_hash_field_needed) { - if (key_cinfo->algorithm == HA_KEY_ALG_UNDEF) + if (key_cinfo->algorithm == HA_KEY_ALG_UNDEF || key_cinfo->algorithm == HA_KEY_ALG_HASH) key_cinfo->algorithm= HA_KEY_ALG_LONG_HASH; - if (key_cinfo->algorithm != HA_KEY_ALG_HASH && - key_cinfo->algorithm != HA_KEY_ALG_LONG_HASH) + if (key_cinfo->algorithm != HA_KEY_ALG_LONG_HASH) { my_error(ER_TOO_LONG_KEY, MYF(0), max_key_length); DBUG_RETURN(TRUE); @@ -9163,7 +9162,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, LEX_CSTRING tmp_name; bzero((char*) &key_create_info, sizeof(key_create_info)); if (key_info->algorithm == HA_KEY_ALG_LONG_HASH) - key_info->algorithm= alter_ctx->fast_alter_partition ? + key_info->algorithm= (alter_ctx->fast_alter_partition || !(alter_info->flags & ALTER_CHANGE_COLUMN)) ? HA_KEY_ALG_HASH : HA_KEY_ALG_UNDEF; /* For fast alter partition we set HA_KEY_ALG_HASH above to make sure it