mysql 存储函数 return 值字符集

mysql stored function return value charset

我有 mysql 用户定义函数

DELIMITER $$ 
    CREATE FUNCTION `myfunc`(`str` TEXT) RETURNS TEXT CHARSET utf8
NO SQL
DETERMINISTIC
SQL SECURITY INVOKER
BEGIN

RETURN str;
END$$

DELIMITER ;

它只是 returns 传回参数,没有任何改变

我的问题是,如果我传递一些俄语或希腊语字母,那么我只能返回 ??????作为回应

SELECT myfunc('ывфафывавы');

将return ????????????

如果我打电话 SELECT myfunc('sdfasfsdf'); 我得到 sdfasfsdf 结果

找不到问题所在,有什么想法吗?

尝试使用 CHARSET utf8 声明您的参数,就像您定义结果一样。

DELIMITER $$ 
CREATE FUNCTION `myfunc`(`str` TEXT CHARSET utf8) 
    RETURNS TEXT CHARSET utf8
    NO SQL
    DETERMINISTIC
    SQL SECURITY INVOKER
    BEGIN

        RETURN str;
    END$$

DELIMITER ;

否则 MySQL 会将您的传入参数转换为默认字符集。