diff --git a/mysql-test/r/func_set.result b/mysql-test/r/func_set.result index f9374d246d3..a860ce57cb4 100644 --- a/mysql-test/r/func_set.result +++ b/mysql-test/r/func_set.result @@ -316,3 +316,10 @@ invalid column 0 bravo,delta,foxtrot invalid column 0 foxtrot invalid column 0 alpha DROP TABLE t1; +# +# Bug#119995 FIND_IN_SET() returns wrong result +# +SET collation_connection = 'utf8mb4_0900_ai_ci'; +SELECT FIND_IN_SET('ắ', 'a'); +FIND_IN_SET('ắ', 'a') +1 diff --git a/mysql-test/t/func_set.test b/mysql-test/t/func_set.test index 1416a1f7fd2..8f0d5986eb1 100644 --- a/mysql-test/t/func_set.test +++ b/mysql-test/t/func_set.test @@ -205,3 +205,10 @@ UNION SELECT 'invalid column ', FIND_IN_SET(z, s), s FROM t1; DROP TABLE t1; + +--echo # +--echo # Bug#119995 FIND_IN_SET() returns wrong result +--echo # + +SET collation_connection = 'utf8mb4_0900_ai_ci'; +SELECT FIND_IN_SET('ắ', 'a'); diff --git a/sql/item_func.cc b/sql/item_func.cc index bf9823a24ed..dfd2a934d04 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -4570,7 +4570,7 @@ longlong Item_func_find_in_set::val_int() { String *buffer = args[1]->val_str(&value2); if (buffer == nullptr) return error_int(); - if (buffer->length() >= find->length()) { + if (buffer->numchars() >= find->numchars()) { my_wc_t wc = 0; const CHARSET_INFO *cs = cmp_collation.collation; const char *str_begin = buffer->ptr();