diff options
Diffstat (limited to 'innobase/row/row0sel.c')
-rw-r--r-- | innobase/row/row0sel.c | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/innobase/row/row0sel.c b/innobase/row/row0sel.c index 1fc329fe2ca..fb508e7b1da 100644 --- a/innobase/row/row0sel.c +++ b/innobase/row/row0sel.c @@ -2145,19 +2145,14 @@ row_sel_store_mysql_rec( extern_field_heap = NULL; } } else { - /* MySQL sometimes seems to copy the 'data' - pointed to by a BLOB field even if the field - has been marked to contain the SQL NULL value. - This caused seg faults reported by two users. - Set the BLOB length to 0 and the data pointer - to NULL to avoid a seg fault. */ - - if (templ->type == DATA_BLOB) { - row_sel_field_store_in_mysql_format( - mysql_rec + templ->mysql_col_offset, - templ->mysql_col_len, NULL, - 0, templ->type, templ->is_unsigned); - } + /* MySQL seems to assume the field for an SQL NULL + value is set to zero. Not taking this into account + caused seg faults with NULL BLOB fields, and + bug number 154 in the MySQL bug database: GROUP BY + and DISTINCT could treat NULL values inequal. */ + + memset(mysql_rec + templ->mysql_col_offset, '\0', + templ->mysql_col_len); if (!templ->mysql_null_bit_mask) { fprintf(stderr, |