【问题标题】:SQLint showing a syntax error, yet batch file is run correctly?SQLint 显示语法错误,但批处理文件运行正确?
【发布时间】:2019-03-17 23:02:01
【问题描述】:

我正在使用带有 SublimeLinter-contrib-sqlint 插件的 Sublime Text,并按照 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 中,我看到一个语法错误:

如果我将鼠标悬停在它上面,它只会显示“错误:“(””附近的语法错误。但是,它似乎作为批处理输入运行良好:

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> 

知道什么可能导致这种“误报”语法错误吗?

【问题讨论】:

  • int 通常不需要长度,但 MySQL 确实允许。所以,这是 MySQL 特有的东西。

标签: mysql sql sublimetext3 sublimelinter


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    再深入一点,SublimeLinter-contrib-sqlint 包说它使用sqlint 进行 linting,并且该存储库中的自述文件包括以下内容:

    在这个阶段,SQLint 根据 ANSI 语法检查 SQL,并使用 PostgreSQL SQL 解析器来实现这一点。我们希望及时添加对非标准 SQL 变体(例如 MySQL)的支持。欢迎投稿。

    因此,目前该工具似乎无法检查使用非 ANSI/PostgreSQL 风格的 SQL 的 SQL 文件。

    【讨论】:

      猜你喜欢
      • 2019-12-02
      • 2023-03-25
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      • 2016-02-24
      • 1970-01-01
      相关资源
      最近更新 更多