mysql存储函数返回值字符集

dav*_*1ua 1 mysql character-encoding user-defined-functions

我有mysql用户定义的函数

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

RETURN str;
END$$

DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

它只是返回传递的参数而不进行任何更改

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

SELECT myfunc('??????????');
Run Code Online (Sandbox Code Playgroud)

将返回 ??????????

如果我调用 SELECT myfunc('sdfasfsdf'); 结果我得到了 sdfasfsdf

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

O. *_*nes 5

尝试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 ;
Run Code Online (Sandbox Code Playgroud)

没有那个 MySQL 将您的传入参数转换为您的默认字符集。