使用show create功能失去与服务器的连接

问题描述

我之前已经看到过常见的在查询错误期间与MysqL服务器的丢失连接,其中包含大型数据集等。我没有看到但现在看到的是运行SHOW CREATE FUNCTION时的消息。该函数只有大约20行长,并且似乎没有语法错误。我能够删除并重新创建它而没有问题(使用备份中的定义)。如果使用不同的名称创建相同的函数,则不会出错。但是使用原始名称,我得到了错误。我该怎么做才能解决此问题?

有关功能

DELIMITER$$

DROP FUNCTION IF EXISTS `check_address`$$

CREATE FUNCTION `check_address`(
    _loan_id BIGINT,_address1 VARCHAR(255),_address2 VARCHAR(255),_city VARCHAR(255),_state VARCHAR(255),_zip VARCHAR(255)
    ) RETURNS tinyint(1)
    DETERMINISTIC
    sql Security INVOKER
BEGIN
    
    DECLARE _cur_address1 VARCHAR(255);
    DECLARE _cur_address2 VARCHAR(255);
    DECLARE _cur_city VARCHAR(255);
    DECLARE _cur_state VARCHAR(255);
    DECLARE _cur_zip VARCHAR(255);
    DECLARE _is_ok tinyint(1);
    DECLARE CONTINUE HANDLER FOR NOT FOUND BEGIN SET _is_ok = NULL; END;
    
    SELECT
        property_address.address_1,property_address.address_2,property_address.city,property_address.state_abrv,property_address.zip_id
    INTO 
        _cur_address1,_cur_address2,_cur_city,_cur_state,_cur_zip
    FROM property_address WHERE property_address.loan_id = _loan_id;
    
    SELECT  IF(LOWER(TRIM(BOTH FROM _cur_address1)) = LOWER(TRIM(BOTH FROM _address1)),1) +
        IF(LOWER(TRIM(BOTH FROM _cur_address2)) = LOWER(TRIM(BOTH FROM _address2)),1) +
        IF(LOWER(TRIM(BOTH FROM _cur_city)) = LOWER(TRIM(BOTH FROM _city)),1) +
        IF(LOWER(TRIM(BOTH FROM _cur_state)) = LOWER(TRIM(BOTH FROM _state)),1) +
        IF(LOWER(TRIM(BOTH FROM _cur_zip)) = LOWER(TRIM(BOTH FROM _zip)),1)
    INTO _is_ok;
    
    RETURN _is_ok;
    
END$$

编辑:其他有趣的细节:

这些作品:

  • SHOW CREATE FUNCTION dbname.check_address;
  • SHOW CREATE FUNCTION dbname.`check_address`;
  • SHOW CREATE FUNCTION `dbname`.check_address;

这不是:

  • SHOW CREATE FUNCTION `dbname`.`check_address`;

MysqL --version输出(是的,它很旧-不受我的控制):

MysqL  Ver 14.14 distrib 5.6.35-80.0,for Linux (x86_64) using  5.1

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)