为什么MariaDB拒绝创建错误为[42000] [1064]的简单表?

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

我只想知道如何解决此问题,或者为什么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

有人可以帮我吗?

mysql sql mariadb create-table
2个回答
0
投票

您似乎在MySQL数据库中使用Oracle语法。需要进行一些修改:

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

即:

  • VARCHAR2(n)特定于Oracle; MySQL(和大多数其他数据库)具有VARCHAR(n)

  • MySQL中也没有NUMBER(n)数据类型;有NUMERIC(n, m),这是一个定点数字,但是您可能还是要在这里INT


0
投票

数据类型来自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

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