Commit 78dff026 authored by unknown's avatar unknown

Bug#14171: Wrong internal default value for a BINARY field.

A BINARY field is represented by the Field_string class. The space character
is used as the filler for unused characters in such a field. But a BINARY field 
should use \x00 instead.

Field_string:reset() now detects whether the current field is a BINARY one
and if so uses the \x00 character as a default value filler.


sql/field.h:
  Bug#14171: Wrong internal default value for a BINARY field.
  Field_string:reset() now detects whether the current field is a BINARY one
  and if so uses the \x00 character as a default value filler.
mysql-test/r/type_binary.result:
  Added a test case for the bug#14171: Wrong internal default value for a BINARY field.
mysql-test/t/type_binary.test:
  Added a test case for the bug#14171: Wrong internal default value for a BINARY field.
parent f831f46a
...@@ -136,4 +136,13 @@ insert into t1 values(NULL, 0x412020); ...@@ -136,4 +136,13 @@ insert into t1 values(NULL, 0x412020);
ERROR 22001: Data too long for column 'vb' at row 1 ERROR 22001: Data too long for column 'vb' at row 1
drop table t1; drop table t1;
set @@sql_mode= @old_sql_mode; set @@sql_mode= @old_sql_mode;
create table t1(f1 int, f2 binary(2) not null, f3 char(2) not null);
insert into t1 set f1=1;
Warnings:
Warning 1364 Field 'f2' doesn't have a default value
Warning 1364 Field 'f3' doesn't have a default value
select hex(f2), hex(f3) from t1;
hex(f2) hex(f3)
0000
drop table t1;
End of 5.0 tests End of 5.0 tests
...@@ -91,4 +91,12 @@ insert into t1 values(NULL, 0x412020); ...@@ -91,4 +91,12 @@ insert into t1 values(NULL, 0x412020);
drop table t1; drop table t1;
set @@sql_mode= @old_sql_mode; set @@sql_mode= @old_sql_mode;
#
# Bug#14171: Wrong default value for a BINARY field
#
create table t1(f1 int, f2 binary(2) not null, f3 char(2) not null);
insert into t1 set f1=1;
select hex(f2), hex(f3) from t1;
drop table t1;
--echo End of 5.0 tests --echo End of 5.0 tests
...@@ -1034,7 +1034,8 @@ public: ...@@ -1034,7 +1034,8 @@ public:
bool zero_pack() const { return 0; } bool zero_pack() const { return 0; }
int reset(void) int reset(void)
{ {
charset()->cset->fill(charset(),ptr,field_length,' '); charset()->cset->fill(charset(),ptr,field_length,
(has_charset() ? ' ' : 0));
return 0; return 0;
} }
int store(const char *to,uint length,CHARSET_INFO *charset); int store(const char *to,uint length,CHARSET_INFO *charset);
......
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