Почему MariaDB отказывается создавать простую таблицу с ошибкой [42000] [1064]? - PullRequest
1 голос
/ 29 марта 2020

Я просто хочу знать, как это исправить, или почему сервер MariaDB заставляет меня возвращать ошибку. Я просто устанавливаю базу данных, создаю пользователя, новую схему, я указываю на эту базу данных с помощью use database testing;, и я готов создать простую таблицу в базе данных с этим запросом:

CREATE TABLE USERS
(
    ID          NUMBER(4)    NOT NULL PRIMARY KEY,
    NAME        VARCHAR2(20) NOT NULL,
    DEPTO       VARCHAR2(20) NOT NULL
);

Пользователь в базе данных, которую я использую, предоставил все привилегии. Но MariaDB возвращает:

[42000][1064] (conn=14) 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 'NUMBER(4) NOT NULL PRIMARY KEY
[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 'NUMBER(4) NOT NULL PRIMARY KEY
)' at line 2
Query is: CREATE TABLE USERS (
ID NUMBER(4) NOT NULL PRIMARY KEY
)
java thread: RMI TCP Connection(5)-127.0.0.1

Может ли кто-нибудь мне помочь?

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Типы данных от Oracle, и вы можете установить SQL_MODE для принятия этого синтаксиса:

В MariaDB 10.3 и более поздних версиях установите системную переменную sql_mode в значение Oracle позволяет серверу понимать подмножество языка Oracle PL / SQL. Например:

SET SQL_MODE='ORACLE';

CREATE TABLE USERS
(
    ID          NUMBER(4)    NOT NULL PRIMARY KEY,
    NAME        VARCHAR2(20) NOT NULL,
    DEPTO       VARCHAR2(20) NOT NULL
);

Имейте в виду, что NUMBER и VARCHAR2 являются синонимами:

+-------------+-----------------+
| Oracle type | MariaDB synonym |
+-------------+-----------------+
| VARCHAR2    | VARCHAR         |
| NUMBER      | DECIMAL         |
+-------------+-----------------+

db <> fiddle demo

1 голос
/ 29 марта 2020

Вы, похоже, используете синтаксис Oracle в базе данных MySQL. Необходимы некоторые адаптации:

CREATE TABLE USERS (
    ID          INT    NOT NULL PRIMARY KEY,
    NAME        VARCHAR(20) NOT NULL,
    DEPTO       VARCHAR(20) NOT NULL
);

А именно:

  • VARCHAR2(n) задано c для Oracle; MySQL (и большинство других баз данных) имеют VARCHAR(n)

  • В MySQL также нет типа данных NUMBER(n); есть NUMERIC(n, m), который является числом с фиксированной запятой, но вы все равно, возможно, захотите INT здесь

...