Commit da2e47a5 authored by Alexander Barkov's avatar Alexander Barkov

After-fix for WL#2649 Number-to-string conversion.

This change fixes test failure for partition_repair_myisam
and partition_recover_myisam.

The problem was that:
- the file std_data/corrupt_crash.MYI
  contains charsetnr=63 (binary) for index segments.
- the new .frm file contains charsetnr=8 (latin1) for
  the same segments.
As a result REPAIR refused to repair frm+MYI files
with different segment definition.

This fix restores the old behavior for frm and MYI files:
they now store charsetnr=63 for numeric/datetime data types.
parent d59c06d9
...@@ -689,7 +689,7 @@ int ha_heap::create(const char *name, TABLE *table_arg, ...@@ -689,7 +689,7 @@ int ha_heap::create(const char *name, TABLE *table_arg,
if (field->flags & (ENUM_FLAG | SET_FLAG)) if (field->flags & (ENUM_FLAG | SET_FLAG))
seg->charset= &my_charset_bin; seg->charset= &my_charset_bin;
else else
seg->charset= field->charset(); seg->charset= field->charset_for_protocol();
if (field->null_ptr) if (field->null_ptr)
{ {
seg->null_bit= field->null_bit; seg->null_bit= field->null_bit;
......
...@@ -274,7 +274,7 @@ int table2myisam(TABLE *table_arg, MI_KEYDEF **keydef_out, ...@@ -274,7 +274,7 @@ int table2myisam(TABLE *table_arg, MI_KEYDEF **keydef_out,
keydef[i].seg[j].bit_start= keydef[i].seg[j].bit_end= keydef[i].seg[j].bit_start= keydef[i].seg[j].bit_end=
keydef[i].seg[j].bit_length= 0; keydef[i].seg[j].bit_length= 0;
keydef[i].seg[j].bit_pos= 0; keydef[i].seg[j].bit_pos= 0;
keydef[i].seg[j].language= field->charset()->number; keydef[i].seg[j].language= field->charset_for_protocol()->number;
if (field->null_ptr) if (field->null_ptr)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment