MySQL 5.1.39 SQL语法错误

MySQL 5.1.39 SQL语法错误,mysql,sql,syntax,syntax-error,Mysql,Sql,Syntax,Syntax Error,我已经将MySQL服务器升级到了5.1.39,现在当我运行SQL脚本(之前已经运行过)时,它会抛出错误。我检查了很多次语法,没有发现任何不兼容的代码部分。请提出解决这个问题的办法 错误消息 错误:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解在第3行“CREATE FUNCTION clean_dymmy_table(dummy_name VARCHAR(255))返回V”附近使用的正确语法: SQL代码: /*DELIMITER //*/ DROP FUNCTION I

我已经将MySQL服务器升级到了5.1.39,现在当我运行SQL脚本(之前已经运行过)时,它会抛出错误。我检查了很多次语法,没有发现任何不兼容的代码部分。请提出解决这个问题的办法

错误消息

错误:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解在第3行“CREATE FUNCTION clean_dymmy_table(dummy_name VARCHAR(255))返回V”附近使用的正确语法:

SQL代码:

 /*DELIMITER //*/
 DROP FUNCTION IF EXISTS clean_dymmy_table;
 CREATE FUNCTION clean_dymmy_table (dummy_name VARCHAR(255)) RETURNS VARCHAR(255)
 DETERMINISTIC
 BEGIN
    DECLARE temp_val VARCHAR(255);
    SET temp_val = dummy_name;

    -- Test
    SET temp_val = REPLACE(temp_val, 'Tmp ', '');
    SET temp_val = REPLACE(temp_val, ' TmP', '');
    SET temp_val = REPLACE(temp_val, 'TMP ', '');
    SET temp_val = REPLACE(temp_val, ' TMP', '');
    SET temp_val = REPLACE(temp_val, ' tmp', '');

    RETURN dummy_name;
 END/*//*/

不确定为什么删除了分隔符部分,但当我将其添加回时,它运行良好:

DELIMITER // -- you have to change what MySQL expects between commands
DROP FUNCTION IF EXISTS clean_dymmy_table // -- tell it a new command's coming
CREATE FUNCTION clean_dymmy_table (dummy_name VARCHAR(255)) 
                                   RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN
    -- now this can be parsed as part of the current command.
    DECLARE temp_val VARCHAR(255); 
    SET temp_val = dummy_name;

    -- Test
    RETURN dummy_name;
END
// -- Now you're done with that command.
-- go back to semi-colons, because otherwise life is too zany for me.
DELIMITER ; 

(这是在5.1.54中…但我认为这不重要)

直觉:5.1.x行中关于
分隔符的部分似乎有一个MySQL错误,可能会在这里咬到你:

  • 在MySql.Data.MySqlClient.MySqlScript中使用分隔符命令

尽管这在很大程度上取决于您如何称呼它,但您的症状确实表明,考虑到您的MySQL版本,它很可能就是那个bug。是否可以升级?

错误消息与提供的SQL代码不匹配。您认为这与此有关吗?我已将代码更改为:
DELIMITER//DROP函数IF EXISTS clean_dymmy_table//CREATE函数clean_dymmy_table(dummy_name VARCHAR(255))返回VARCHAR(255)DETERMINISTIC BEGIN DECLARE temp_val VARCHAR(255);设置临时值=虚拟名称;返回温度值;结束//分隔符
如果将上述内容复制并粘贴到将评估脚本的内容中会发生什么?(在MySQL浏览器中,这将在脚本下进行,不会是常规查询)更好的方法是不升级。您有什么建议吗?我如何重构SQL代码以去除代码中的分隔符语句?不幸的是,我从未使用过SQL过程。但是如果我正确理解了这个bug,那么您应该能够通过从mysql客户端调用代码来使用
分隔符。查看Valeriy Kravchuk在该链接中的评论。