Commit edbea609 authored by unknown's avatar unknown

Expanding a binary field should result in 0x00-filled positions, not 0x20

(ASCII space).  For Bug#16857.


sql/field_conv.cc:
  Bug#16857:  Do not expand BINARY fields as if they are strings (which 
  presumably /should/ be filled with spaces).  Instead, fill BINARY fields
  with 0x00 bytes.
parent d25f1055
......@@ -141,3 +141,22 @@ t1 CREATE TABLE `t1` (
`a` binary(1) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
create table t1 (col1 binary(4));
insert into t1 values ('a'),('a ');
select hex(col1) from t1;
hex(col1)
61000000
61200000
alter table t1 modify col1 binary(10);
select hex(col1) from t1;
hex(col1)
61000000000000000000
61200000000000000000
insert into t1 values ('b'),('b ');
select hex(col1) from t1;
hex(col1)
61000000000000000000
61200000000000000000
62000000000000000000
62200000000000000000
drop table t1;
......@@ -89,3 +89,15 @@ show create table t1;
drop table t1;
# End of 4.1 tests
#
# Bug#16857
#
create table t1 (col1 binary(4));
insert into t1 values ('a'),('a ');
select hex(col1) from t1;
alter table t1 modify col1 binary(10);
select hex(col1) from t1;
insert into t1 values ('b'),('b ');
select hex(col1) from t1;
drop table t1;
......@@ -379,6 +379,16 @@ static void do_cut_string_complex(Copy_field *copy)
static void do_expand_binary(Copy_field *copy)
{
CHARSET_INFO *cs= copy->from_field->charset();
memcpy(copy->to_ptr,copy->from_ptr,copy->from_length);
cs->cset->fill(cs, copy->to_ptr+copy->from_length,
copy->to_length-copy->from_length, '\0');
}
static void do_expand_string(Copy_field *copy)
{
CHARSET_INFO *cs= copy->from_field->charset();
......@@ -583,7 +593,13 @@ void (*Copy_field::get_copy_func(Field *to,Field *from))(Copy_field*)
return (from->charset()->mbmaxlen == 1 ?
do_cut_string : do_cut_string_complex);
else if (to_length > from_length)
return do_expand_string;
{
if ((to->flags & BINARY_FLAG) != 0)
return do_expand_binary;
else
return do_expand_string;
}
}
else if (to->real_type() != from->real_type() ||
to_length != from_length ||
......
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