Mysql 8自定义字符串函数总是返回零

问题描述 投票:0回答:1

我现在已经坚持了一段时间。我在MySQL8中编写了一个简单的slugify UDF,它使用了内置的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()分配给变量或返回值时才会出现问题。

文档没有说你不能在udf中使用regexp_replace,为什么这个返回0没有任何错误或警告?

mysql database mysql-8.0
1个回答
0
投票

由于一些评论表明这个函数在dbfiddle中正常工作,我开始对dbfiddle和我自己的服务器上使用的版本进行一些研究。

这个slugify函数在mysql 8.0.12中工作正常,但在mysql 8.0.11中没有。我在8.0.12中找到了2个关于regexp_replace()的相关错误:

我将我的服务器更新到8.0.12并使该功能正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.