【问题标题】:MySQL 5.1.39 SQL syntax errorMySQL 5.1.39 SQL 语法错误
【发布时间】:2011-06-28 10:28:02
【问题描述】:

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

错误信息

Mysql::Error: 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的“CREATE FUNCTION clean_dymmy_table (dummy_name VARCHAR(255)) RETURNS 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/*//*/

【问题讨论】:

标签: mysql sql syntax syntax-error


【解决方案1】:

不知道为什么你删除了 DELIMITER 部分,但是当我重新添加它时,它运行良好:

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 中......但我认为这无关紧要)

【讨论】:

  • 我已将代码更改为: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; RETURN temp_val; END // DELIMITER ; 但现在它抛出相同的错误Mysql::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER // DROP FUNCTION IF EXISTS clean_dymmy_table // CREATE FUNCTION c' at line 1
  • 如果您将上面的内容复制并粘贴到将评估脚本的内容中会发生什么? (在 MySQL 浏览器中,这将在脚本下,不会是常规查询)
【解决方案2】:

预感:在 5.1.x 行中似乎有一个与 DELIMITER 相关的 MySQL 错误,可能会在这里咬你:

  • #46429 在 MySql.Data.MySqlClient.MySqlScript 中使用 DELIMITER 命令

虽然这在很大程度上取决于您如何称呼它,但考虑到cwallenpoole's response,您的症状确实表明它很可能是那个错误,考虑到您的 MySQL 版本。您有可能升级吗?

【讨论】:

  • 更好的方法是不升级。您有什么建议,如何重构 SQL 代码以摆脱代码中的 DELIMITER 语句?
  • 很遗憾,我从未使用过 SQL 过程。但是如果我正确理解了这个错误,你应该可以通过调用 mysql client 中的代码来使用DELIMITER。查看该链接中 Valeriy Kravchuk 的评论。
猜你喜欢
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多