diff --git a/mysql-test/r/func_set.result b/mysql-test/r/func_set.result index 2431406c128..ca6e0a8c319 100644 --- a/mysql-test/r/func_set.result +++ b/mysql-test/r/func_set.result @@ -64,3 +64,6 @@ find_in_set('a',binary 'A,B,C') select find_in_set(binary 'a', 'A,B,C'); find_in_set(binary 'a', 'A,B,C') 0 +select find_in_set('1','3,1,'); +find_in_set('1','3,1,') +2 diff --git a/mysql-test/t/func_set.test b/mysql-test/t/func_set.test index d669739bcb4..98ef1e07bfe 100644 --- a/mysql-test/t/func_set.test +++ b/mysql-test/t/func_set.test @@ -47,3 +47,8 @@ select find_in_set(binary 'a',binary 'A,B,C'); select find_in_set('a',binary 'A,B,C'); select find_in_set(binary 'a', 'A,B,C'); +# +# Bug5513:FIND_IN_SET fails if set ends with a comma +# +select find_in_set('1','3,1,'); + diff --git a/sql/item_func.cc b/sql/item_func.cc index ef845bb8266..b665a5b25c6 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -1455,10 +1455,11 @@ longlong Item_func_find_in_set::val_int() { const char *substr_end= str_end + symbol_len; bool is_last_item= (substr_end == real_end); - if (wc == (my_wc_t) separator || is_last_item) + bool is_separator= (wc == (my_wc_t) separator); + if (is_separator || is_last_item) { position++; - if (is_last_item) + if (is_last_item && !is_separator) str_end= substr_end; if (!my_strnncoll(cs, (const uchar *) str_begin, str_end - str_begin,