2010-06-15 77 views
0

这适用于MySQL 5.0.41,但在5.1.31上它只是说“未能创建函数”。 我在控制台输入:MySQL:未能创建函数{functionName}

delimiter | 
<press enter> 
CREATE DEFINER=`root`@`localhost` FUNCTION `ucwords`(str VARCHAR(128)) RETURNS varchar(128) CHARSET utf8 
BEGIN 
    DECLARE c CHAR(1); 
    DECLARE s VARCHAR(128); 
    DECLARE i INT DEFAULT 1; 
    DECLARE bool INT DEFAULT 1; 
    DECLARE punct CHAR(17) DEFAULT '()[]{},[email protected];:?/'; 
    SET s = LCASE(str); 
    WHILE i < LENGTH(str) DO 
    BEGIN 
     SET c = SUBSTRING(s, i, 1); 
     IF LOCATE(c, punct) > 0 THEN 
     SET bool = 1; 
     ELSEIF bool=1 THEN 
     BEGIN 
      IF c >= 'a' AND c <= 'z' THEN 
      BEGIN 
       SET s = CONCAT(LEFT(s,i-1),UCASE(c),SUBSTRING(s,i+1)); 
       SET bool = 0; 
      END; 
      ELSEIF c >= '0' AND c <= '9' THEN 
      SET bool = 0; 
      END IF; 
     END; 
     END IF; 
     SET i = i+1; 
    END; 
    END WHILE; 
    RETURN s; 
END | 
<press enter> 

我甚至试图尽量减少它只是:

delimiter | 
<press enter> 
CREATE DEFINER=`root`@`localhost` FUNCTION `ucwords`(str VARCHAR(128)) RETURNS varchar(128) CHARSET utf8 
BEGIN 
    DECLARE s VARCHAR(128); 
    RETURN s; 
END | 
<press enter> 

我甚至已经尝试过了没有定义者,只是用:

delimiter | 
<press enter> 
CREATE FUNCTION `ucwords`(str VARCHAR(128)) RETURNS varchar(128) CHARSET utf8 
BEGIN 
    DECLARE s VARCHAR(128); 
    RETURN s; 
END | 
<press enter> 

回答

0

你最近从MySQL 5.0升级到5.1吗?如果是这样,您需要运行mysql_upgrade脚本来更新系统表。在这种情况下,mysql.proc的表架构发生变化,这可以解释你的问题: http://dev.mysql.com/doc/refman/5.1/en/mysql-upgrade.html

更多有关升级到5.1: http://dev.mysql.com/doc/refman/5.1/en/upgrading-from-previous-series.html

+0

不,这只是我从一台服务器移动应用(运行5.0.41)到另一个(运行5.1.31),它不适用于新的,我不能和不愿降级。 – 2010-06-22 14:53:15