В чем синтаксическая ошибка в этом простом SQL-запросе для создания таблицы?

#mysql #sql #mariadb #datagrip

Вопрос:

Я пытаюсь использовать DataGrip IntelliJ для выполнения некоторой работы с SQL в базе данных MariaDB.

Почему-то я не могу выполнить запрос, который был автоматически создан самим DataGrip….

Можете ли вы помочь мне найти в нем ошибку ?

 create table currencyIndex
(
    id int auto_increment,
    isoCode VARCHAR2(3) not null,
    isoCodeNumeric SMALLINT not null,
    currencyName VARCHAR2(100) not null,
    countryName VARCHAR2(100) not null,
    constraint currencyIndex_pk
        primary key (id)
);
 

Ошибка в том, что

 [42000][1064] (conn=246) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(3) not null,
[42000][1064] You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(3) not null,
    isoCodeNumeric SMALLINT not null,
    currencyName VARCHAR2(100) ...' at line 4.
 

Я попытался проверить запрос с помощью онлайн-валидатора, и, похоже, все в порядке… Есть какие-нибудь предложения ?

Комментарии:

1. Что такое VARCHAR2 ? Почему бы не использовать просто VARCHAR?

Ответ №1:

У MariaDB и MySQL нет VARCHAR2 типа (но у Oracle есть). Используйте обычный VARCHAR , и ошибка должна исчезнуть:

 CREATE TABLE currencyIndex (
    id INT AUTO_INCREMENT,
    isoCode VARCHAR(3) NOT NULL,
    isoCodeNumeric SMALLINT NOT NULL,
    currencyName VARCHAR(100) NOT NULL,
    countryName VARCHAR(100) NOT NULL,
    CONSTRAINT currencyIndex_pk PRIMARY KEY (id)
);
 


ДЕМОНСТРАЦИЯ

Комментарии:

1. Спасибо, чувак… странно, что этот валидатор MySQL говорит, что все в порядке eversql.com/sql-syntax-check-validator

2. Я могу предположить и сказать, что, возможно, его создатели обленились и просто имеют один фиксированный набор разрешенных типов столбцов. Единственная проверка, которая вам нужна, — это проверка фактической базы данных. Проверьте демо-ссылку, которую я дал, она работает сейчас.