diff options
Diffstat (limited to 'sql/field.cc')
-rw-r--r-- | sql/field.cc | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/sql/field.cc b/sql/field.cc index 75e1f285d74..333a843f81c 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -7570,7 +7570,8 @@ int Field_string::cmp(const uchar *a_ptr, const uchar *b_ptr) const return field_charset()->coll->strnncollsp_nchars(field_charset(), a_ptr, field_length, b_ptr, field_length, - Field_string::char_length()); + Field_string::char_length(), + MY_STRNNCOLLSP_NCHARS_EMULATE_TRIMMED_TRAILING_SPACES); } @@ -7950,10 +7951,11 @@ int Field_varstring::cmp(const uchar *a_ptr, const uchar *b_ptr) const int Field_varstring::cmp_prefix(const uchar *a_ptr, const uchar *b_ptr, - size_t prefix_len) const + size_t prefix_char_len) const { - /* avoid expensive well_formed_char_length if possible */ - if (prefix_len == table->field[field_index]->field_length) + /* avoid more expensive strnncollsp_nchars() if possible */ + if (prefix_char_len * field_charset()->mbmaxlen == + table->field[field_index]->field_length) return Field_varstring::cmp(a_ptr, b_ptr); size_t a_length, b_length; @@ -7973,8 +7975,8 @@ int Field_varstring::cmp_prefix(const uchar *a_ptr, const uchar *b_ptr, a_length, b_ptr + length_bytes, b_length, - prefix_len / - field_charset()->mbmaxlen); + prefix_char_len, + 0); } @@ -8761,7 +8763,7 @@ int Field_blob::cmp(const uchar *a_ptr, const uchar *b_ptr) const int Field_blob::cmp_prefix(const uchar *a_ptr, const uchar *b_ptr, - size_t prefix_len) const + size_t prefix_char_len) const { uchar *blob1,*blob2; memcpy(&blob1, a_ptr+packlength, sizeof(char*)); @@ -8770,8 +8772,8 @@ int Field_blob::cmp_prefix(const uchar *a_ptr, const uchar *b_ptr, return field_charset()->coll->strnncollsp_nchars(field_charset(), blob1, a_len, blob2, b_len, - prefix_len / - field_charset()->mbmaxlen); + prefix_char_len, + 0); } @@ -9956,7 +9958,7 @@ my_decimal *Field_bit::val_decimal(my_decimal *deciaml_value) (not the table->record[0] necessarily) */ int Field_bit::cmp_prefix(const uchar *a, const uchar *b, - size_t prefix_len) const + size_t prefix_char_len) const { my_ptrdiff_t a_diff= a - ptr; my_ptrdiff_t b_diff= b - ptr; |