DataGrip 和 MySql Workbench 在存储过程的有效性上有所不同

DataGrip and MySql Workbench Differ on Validness of a Stored Procedure

Datagrip 在 mysql 中说并完美地运行了以下过程,但是 mysql 命令行和 workbench 说我的 sql 中存在语法错误。这是为什么?

CREATE PROCEDURE addTag(n VARCHAR(255), d VARCHAR(255))
  BEGIN
    INSERT INTO Tags(name, description) VALUES
      (n, d);
  END;

下面是 mysql workbench 的显示方式:

下面复制了操作和错误输出。

创建过程 addTag(n VARCHAR(255), d VARCHAR(255)) BEGIN INSERT INTO Tags(name, description) VALUES (n, d)

错误代码:1064。您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 4

行的 '' 附近使用的正确语法

当您在常规 SQL 编辑器中编写查询时,我们需要一种方法将语句彼此分开。这是由所谓的定界符完成的。默认分隔符是分号(可以更改)。

MySQL 服务器也使用分号来分隔存储程序(存储过程、函数、事件等)中的语句。服务器一次只能处理一个语句,这就是为什么客户端必须将脚本拆分成单独的语句。这是通过使用提到的定界符完成的。

现在,当您编写存储程序时,客户端用于为服务器拆分语句的定界符与这些存储程序中的定界符(均为分号)相互冲突。为了避免这种情况,您可以将客户端定界符更改为未出现在您的查询中的其他内容(字符串 + 注释不算在内)。因此,在每个 (My)SQL 工具中,您都可以更改此分隔符以避免此问题。

但是,在 MySQL Workbench 中有一些帮助,即对象编辑器。对于数据库中的每种对象类型,都有一个专门用于管理该对象的对象编辑器。对于存储的 procedures/functions,有一个编辑器只允许 create procedurecreate function 块,因此那里不需要(客户端)分隔符。