VSCode SQLTools 对于非关键字作为关键字会给出不必要的错误

问题描述 投票:0回答:1

VSCode SQLTools 对于非关键字作为关键字(如位置、名称、密码等)给出了不必要的错误。

DROP DATABASE IF EXISTS VolleyDB;
CREATE DATABASE VolleyDB;
USE VolleyDB;

CREATE TABLE Player 
(
    username    VARCHAR(512),
    password    VARCHAR(512),
    name    VARCHAR(512),
    surname VARCHAR(512),
    date_of_birth   VARCHAR(512),
    height  INT,
    weight  INT,
    PRIMARY KEY (username)
);

CREATE TABLE PlayerPositions 
(
    player_positions_id INT,
    username    VARCHAR(512),
    position    INT,
    PRIMARY KEY (player_positions_id)
);

CREATE TABLE PlayerTeams 
(
    player_teams_id INT,
    username    VARCHAR(512),
    team    INT,
    PRIMARY KEY (player_teams_id)
);

CREATE TABLE Team 
(
    team_ID INT,
    team_name   VARCHAR(512),
    coach_username  VARCHAR(512),
    contract_start  VARCHAR(512),
    contract_finish VARCHAR(512),
    channel_ID  INT,
    channel_name    VARCHAR(512),
    PRIMARY KEY (team_ID)
);

CREATE TABLE Coach 
(
    username    VARCHAR(512),
    password    VARCHAR(512),
    name    VARCHAR(512),
    surname VARCHAR(512),
    nationality VARCHAR(512),
    PRIMARY KEY (username)
);

CREATE TABLE Position
(
    position_ID INT,
    position_name   VARCHAR(512),
    PRIMARY KEY (position_ID)
);

CREATE TABLE Jury 
(
    username    VARCHAR(512),
    password    VARCHAR(512),
    name    VARCHAR(512),
    surname VARCHAR(512),
    nationality VARCHAR(512),
    PRIMARY KEY (username)
);

CREATE TABLE MatchSession 
(
    session_ID  INT,
    team_ID INT,
    stadium_ID  INT,
    stadium_name    VARCHAR(512),
    stadium_country VARCHAR(512),
    time_slot   INT,
    date    VARCHAR(512),
    assigned_jury_username  VARCHAR(512),
    rating  DOUBLE,
    PRIMARY KEY (session_ID)
);

CREATE TABLE SessionSquads 
(
    squad_ID    INT,
    session_ID  INT,
    played_player_username  VARCHAR(512),
    position_ID INT,
    PRIMARY KEY (squad_ID)
);

这给出了一个错误

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在“Position”附近使用的正确语法 ( 位置 ID INT, 位置名称 VARCHAR(512), 主键’位于第 1 行”

mysql visual-studio-code compiler-errors keyword sqltools
1个回答
0
投票

我使用 SQLTools 进行了测试,然后在

mysql
命令行客户端中测试了相同的代码。它在命令行客户端中工作,但我得到了与 SQLTools 中相同的错误。

我在 SQLTools 和客户端中运行

SELECT @@sql_mode;
进行比较:

SQL工具:

IGNORE_SPACE、ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_ENGINE_SUBSTITUTION

mysql:

ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_ENGINE_SUBSTITUTION

似乎 SQLTools 由于某种原因在 SQL 模式中添加了

IGNORE_SPACE

这样做的效果是,

POSITION (...)
POSITION(...)
解释相同,这意味着它与内置函数
POSITION()
冲突。

您可以通过将表名称放在反引号中来解决此问题。这允许您使用任何保留关键字作为标识符,以及与内置函数冲突的单词。

CREATE TABLE `Position`
(
    position_ID INT,
    position_name   VARCHAR(512),
    PRIMARY KEY (position_ID)
);

可能有一种方法可以覆盖 MySQL SQLTools 驱动程序的 SQL 模式,但我不知道。

© www.soinside.com 2019 - 2024. All rights reserved.