SQLint 显示语法错误,但批处理文件 运行 正确吗?

SQLint showing a syntax error, yet batch file is run correctly?

我将 Sublime Text 与 SublimeLinter-contrib-sqlint plugin and following the tutorial examples at https://dev.mysql.com/doc/refman/8.0/en/examples.html 一起使用,其中一个包含以下内容:

CREATE TABLE shop (
    article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
    dealer  CHAR(20)                 DEFAULT ''     NOT NULL,
    price   DOUBLE(16,2)             DEFAULT '0.00' NOT NULL,
    PRIMARY KEY(article, dealer));
INSERT INTO shop VALUES
    (1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),
    (3,'C',1.69),(3,'D',1.25),(4,'D',19.95);

在启用了 linter 的 Sublime Text 中,我看到一个语法错误:

如果我将鼠标悬停在它上面,它只会显示 "ERROR: Syntax error near "(""。但是,它似乎 运行 可以作为批输入:

mysql> source shop.sql
Query OK, 0 rows affected (0.07 sec)

Query OK, 7 rows affected (0.00 sec)
Records: 7  Duplicates: 0  Warnings: 0

mysql> 

知道是什么导致了这个 'false positive' 语法错误吗?

我认为字符串不是 INT 的有效默认值。

您的问题看起来是由底层 linting 工具未使用 SQL 的正确方言引起的,这使得它认为您使用的 SQL 无效,即使(对于MySQL) 是。

看得更深一些,SublimeLinter-contrib-sqlint package says that it uses sqlint 执行 linting,该存储库中的自述文件包括:

At this stage, SQLint checks SQL against the ANSI syntax, and uses the PostgreSQL SQL parser to achieve this. In time, we hope to add support for non-standard SQL variants (e.g. MySQL). Contributions are welcome.

因此,目前该工具似乎无法检查使用 non-ANSI/PostgreSQL 风格 SQL.

的 SQL 文件