Mysql 具有泛型长度的varchar参数的函数

Mysql 具有泛型长度的varchar参数的函数,mysql,mysql-5.7,Mysql,Mysql 5.7,我的目标是创建一个MySQL函数,它接受任何字符串并返回它的修改版本。细节不重要,我的问题是签名。我主要是想验证这样的函数的最佳实践是什么 这是我试图实现的愿景(不起作用): CREATE FUNCTION example1(param VARCHAR(n)) RETURNS VARCHAR(n) BEGIN DECLARE result VARCHAR(n); SET result = param; -- do stuff -- RETURN result; E

我的目标是创建一个MySQL函数,它接受任何字符串并返回它的修改版本。细节不重要,我的问题是签名。我主要是想验证这样的函数的最佳实践是什么

这是我试图实现的愿景(不起作用):

CREATE FUNCTION example1(param VARCHAR(n))
RETURNS VARCHAR(n)
BEGIN
    DECLARE result VARCHAR(n);
    SET result = param;
    -- do stuff --
    RETURN result;
END//
通过这种方式,出现了一种奇怪的互动:

CREATE FUNCTION example1(param VARCHAR(35))
RETURNS VARCHAR(35)
BEGIN
    DECLARE result VARCHAR(35);
    SET result = param;
    -- do stuff --
    RETURN result;
END//

CREATE FUNCTION example2(param VARCHAR(10))
RETURNS VARCHAR(10)
BEGIN
    DECLARE result VARCHAR(10);
    SET result = example1(param);
    -- do stuff --
    RETURN result;
END//
所以示例2仍然有效。这似乎只是在输入上验证varchar长度。 然后,为了处理所有字符串,我在生产函数中得到:

CREATE FUNCTION example1(param VARCHAR(10000))
RETURNS VARCHAR(10000)
BEGIN
    DECLARE result VARCHAR(10000);
    SET result = param;
    -- do stuff --
    RETURN result;
END//
现在函数的签名被弄乱了。它可以工作,我可以使用它设置一个具有较小varchar的列——但是谁会在不知道实现细节的情况下调用这样一个函数呢?
有没有一种干净的方法可以做到这一点?

什么奇怪的交互?签名和实现细节是什么意思?将示例1的VARCHAR(35)结果分配到示例2中的VARCHAR(10)结果字段。通过签名,我的意思是,除非您知道实现,否则您永远不会使用返回VARCHAR(10000)的最终函数的结果设置长度为50的列。我认为您需要再次查看VARCHAR字段的存储要求,我会将它们更改为文本数据类型。