Я застрял на этом некоторое время.Я написал простой UDF для slugify в MySQL8, который использует встроенную функцию regexp_replace () .
Синтаксис функции действителен, но всегда возвращает 0 (ноль),для каждого ввода.
DELIMITER $$
CREATE FUNCTION `slugify`(dirty_string varchar(200)) RETURNS varchar(200) CHARSET utf8mb4
DETERMINISTIC
BEGIN
DECLARE slug varchar(200);
SET slug = REGEXP_REPLACE(LOWER(dirty_string), '[éèêë€]','e');
SET slug = REGEXP_REPLACE(slug, '[áàâä@]','a');
SET slug = REGEXP_REPLACE(slug, '[îï]','i');
SET slug = REGEXP_REPLACE(slug, '[üµù]','u');
SET slug = REGEXP_REPLACE(slug, '[öôØøº]','o');
SET slug = REGEXP_REPLACE(slug, '[ç]','c');
SET slug = REGEXP_REPLACE(slug, '[^a-z0-9\-]+','-');
RETURN slug;
END $$
DELIMITER ;
Сначала я подозревал, что специальные символы могут вызвать проблемы, но упрощение функции дает тот же результат:
DELIMITER $$
CREATE FUNCTION `slugify`(dirty_string varchar(200)) RETURNS varchar(200) CHARSET utf8mb4
DETERMINISTIC
BEGIN
DECLARE slug varchar(200);
SET slug = REGEXP_REPLACE(LOWER(dirty_string), 'x','a');
RETURN slug;
END $$
DELIMITER ;
Чтобы проверить синтаксис, я попыталсязаменить функцию regexp_replace на строку, и она работала просто отлично, поэтому проблема возникает только тогда, когда regexp_replace () назначается переменной или возвращаемому значению в пользовательской функции.
В документации не говорится, что вынельзя использовать regexp_replace в udf, так почему это возвращает 0 без каких-либо ошибок или предупреждений?