Имеется таблица table1 с записями типа:
TITLE CODE
Действует active
, т.е. столбец TITLE содержит исключительно текст на кириллицы, CODE - латиница.
Выполняем запрос
select TITLE, CODE from table1
получаем ожидаемые результаты, все работает как часы.
Использую функцию
begin
DECLARE cur_end INT;
declare res varchar(20);
declare log varchar(50);
declare title varchar(50);
declare cur cursor for
select title,code
from table1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET cur_end =1;
set cur_end = 0;
OPEN cur;
cursor_loop:LOOP
FETCH cur INTO title,log;
IF cur_end=1 THEN
LEAVE cursor_loop;
END IF;
set res =concat(res,log, title);
END LOOP cursor_loop;
CLOSE cur;
return res;
end
Из доков почерпнул - concat возвратит NULL если хоть 1 из параметров NULL.
Результат функции выше - NULL.
Методом проб и ошибок выяснялось следующие, функция
...
cursor_loop:LOOP
FETCH cur INTO title,log;
IF cur_end=1 THEN
LEAVE cursor_loop;
END IF;
set res =concat(res, title);
END LOOP cursor_loop;
CLOSE cur;
return res;
...
возвращает NULL, а функция
...
cursor_loop:LOOP
FETCH cur INTO title,log;
IF cur_end=1 THEN
LEAVE cursor_loop;
END IF;
set res =concat(res,log);
END LOOP cursor_loop;
CLOSE cur;
return res;
...
возвращает - active.
Проверил на нескольких таблицах в БД, где имеются русские символы - CURSOR возвращает null.
charset ngix utf8, charset сервера mysql UTF-8, база и таблицы utf8 general ci, все эксперименты проводил на phpMyAdmin 3.5.0.
Я что-то делаю не так?
Подскажите пожалуйста.