Loading mysql-test/r/binary.result +19 −0 Original line number Diff line number Diff line Loading @@ -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; mysql-test/t/binary.test +12 −0 Original line number Diff line number Diff line Loading @@ -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; sql/field_conv.cc +17 −1 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -583,8 +593,14 @@ 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) { 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 || !compatible_db_low_byte_first) Loading Loading
mysql-test/r/binary.result +19 −0 Original line number Diff line number Diff line Loading @@ -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;
mysql-test/t/binary.test +12 −0 Original line number Diff line number Diff line Loading @@ -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;
sql/field_conv.cc +17 −1 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -583,8 +593,14 @@ 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) { 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 || !compatible_db_low_byte_first) Loading