首页 文章

voyager数据库和MariaDB服务器

提问于
浏览
0

28年1月10日,MariaDB的

我正在尝试在voyager管理面板中创建一个新表但我不断收到错误:

generic.exception:执行'CREATE TABLE newReport时发生异常(id INT UNSIGNED AUTO_INCREMENT NOT NULL,owner_id INT DEFAULT NULL,title VARCHAR(166)DEFAULT NULL,description text DEFAULT NULL,report json DEFAULT NULL,created_at timestamp null DEFAULT NULL ,updated_at timestamp null DEFAULT NULL,deleted_at timestamp null DEFAULT NULL,INDEX newreport_owner_id_index(owner_id),PRIMARY KEY(id))DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB':SQLSTATE [42000]:语法错误或访问冲突:1064你有SQL语法中的错误;查看与您的MariaDB服务器版本对应的手册,以便在第1行'json DEFAULT NULL,created_at timestamp null DEFAULT NULL,updated_at timestamp'附近使用正确的语法

或某些 SQL syntax error 的变体取决于我正在尝试的东西 .

我正在使用 Xampp 并且没有安装 MariaDB server 我需要使用 MariaDB server 吗?或者我的问题是别的什么?

screenshot of the table

如果我删除json数据类型错误变为:

generic.exception:执行'CREATE TABLE newReport时发生异常(id INT UNSIGNED AUTO_INCREMENT NOT NULL,owner_id INT DEFAULT NULL,title VARCHAR(166)NOT NULL,description text NOT NULL,report text NOT NULL,created_at timestamp DEFAULT'CURRENT_DATE ',updated_at timestamp null DEFAULT NULL,deleted_at timestamp null DEFAULT NULL,INDEX newreport_owner_id_index(owner_id),PRIMARY KEY(id))DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB':SQLSTATE [42000]:语法错误或访问冲突:1067无效'created_at'的默认值

1 回答

  • 0

    JSON 数据类型是在MySQL 5.7中引入的 .

    此数据类型在早期版本的MySQL(5.6或更早版本)中不可用,并且尚未在MariaDB中实现(至少在10.2版本中,但MariaDB添加了一些JSON函数,例如JSON_VALID . )

    EDIT

    MariaDB在版本10.2.7中添加了对 JSON 数据类型的支持

    https://mariadb.com/kb/en/library/json-data-type/


    要检查您连接到的MySQL / MariaDB服务器的版本:

    SHOW VARIABLES LIKE 'version'
    

    作为测试,您可以将 JSON 数据类型替换为您知道支持的其他数据类型,例如 . VARCHAR(20)TEXT .

    如果MySQL / MariaDB服务器不支持 json 数据类型,则可以使用其他文本类型 .


    在我看来,错误是在 'json 的SQL语法中标记问题 . 并且's where we'期望找到有效的数据类型 . 我的建议作为测试,用已知的良好数据类型替换它,旨在确定问题是否存在 .

    从错误消息,似乎服务器是MariaDB(而不是MySQL)


    我们看到正在执行的语句:

    CREATE TABLE newReport 
    ( id          INT UNSIGNED AUTO_INCREMENT NOT NULL
    , owner_id    INT DEFAULT NULL
    , title       VARCHAR(166) DEFAULT NULL
    , description text DEFAULT NULL
    , report      json DEFAULT NULL
    , created_at  timestamp null DEFAULT NULL
    , updated_at  timestamp null DEFAULT NULL
    , deleted_at  timestamp null DEFAULT NULL
    , INDEX newreport_owner_id_index (owner_id)
    , PRIMARY KEY(id)
    ) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci
    ENGINE = InnoDB
    

    而错误

    : SQLSTATE[42000]: 
    Syntax error or access violation:
      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
    

    以及标记错误的位置

    'json DEFAULT NULL ...
    

    EDIT

    text 替换 json 会将错误更改为

    1067 Invalid default value for 'created_at'
    

    看起来很奇怪,因为在 json 语法错误的语句中是什么

    created_at  timestamp null DEFAULT NULL
                                         ^^^^
    

    这本来有用,但由于某些原因,现在改为

    created_at timestamp null DEFAULT 'CURRENT_DATE' 
                                        ^^^^^^^^^^^^^^
    

    该字符串值 'CURRENT_DATE' 不是时间戳的有效值 . 看起来我们打算引用关键字 CURRENT_TIMESTAMP ,而不是字符串文字

    created_at timestamp null DEFAULT CURRENT_TIMESTAMP
                                        ^^^^^^^^^^^^^^^^^
    

相关问题