diff options
Diffstat (limited to 'sql/field.cc')
-rw-r--r-- | sql/field.cc | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/sql/field.cc b/sql/field.cc index 06744541fcc..c4f3db039c4 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -6509,7 +6509,13 @@ int Field_string::cmp(const uchar *a_ptr, const uchar *b_ptr) void Field_string::sort_string(uchar *to,uint length) { uint tmp __attribute__((unused))= - my_strnxfrm(field_charset, to, length, ptr, field_length); + field_charset->coll->strnxfrm(field_charset, + to, length, + char_length() * + field_charset->strxfrm_multiply, + ptr, field_length, + MY_STRXFRM_PAD_WITH_SPACE | + MY_STRXFRM_PAD_TO_MAXLEN); DBUG_ASSERT(tmp == length); } @@ -6966,9 +6972,13 @@ void Field_varstring::sort_string(uchar *to,uint length) length-= length_bytes; } - tot_length= my_strnxfrm(field_charset, - to, length, ptr + length_bytes, - tot_length); + tot_length= field_charset->coll->strnxfrm(field_charset, + to, length, + char_length() * + field_charset->strxfrm_multiply, + ptr + length_bytes, tot_length, + MY_STRXFRM_PAD_WITH_SPACE | + MY_STRXFRM_PAD_TO_MAXLEN); DBUG_ASSERT(tot_length == length); } @@ -7583,8 +7593,11 @@ void Field_blob::sort_string(uchar *to,uint length) } memcpy(&blob, ptr+packlength, sizeof(char*)); - blob_length=my_strnxfrm(field_charset, - to, length, blob, blob_length); + blob_length= field_charset->coll->strnxfrm(field_charset, + to, length, length, + blob, blob_length, + MY_STRXFRM_PAD_WITH_SPACE | + MY_STRXFRM_PAD_TO_MAXLEN); DBUG_ASSERT(blob_length == length); } } |