summaryrefslogtreecommitdiff
path: root/sql/field.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/field.cc')
-rw-r--r--sql/field.cc22
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;