【问题标题】:Why MariaDB refuses to create a simple table with error [42000][1064]?为什么 MariaDB 拒绝创建一个错误 [42000][1064] 的简单表?
【发布时间】:2020-03-29 20:56:10
【问题描述】:

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


    【解决方案1】:

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

    【讨论】:

    • 这就是我正在做的练习所需的解决方案。谢谢!
    【解决方案2】:

    您似乎在 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-22
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多