0

10.1.28-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 语法错误的某些变体具体取决于我正在尝试的内容。

我正在使用Xampp,但尚未安装MariaDB 服务器,我需要使用MariaDB 服务器吗?还是我的问题是别的?

表格截图

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

generic.exception:执行'CREATE TABLE newReport(id INT UNSIGNED AUTO_INCREMENT NOT NULL,owner_id INT DEFAULT NULL,title VARCHAR(166)NOT NULL,描述文本NOT NULL,报告文本NOT NULL,created_at timestamp DEFAULT'CURRENT_DATE'时发生异常, updated_at 时间戳 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”的值

4

1 回答 1

0

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

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

编辑

MariaDBJSON在 10.2.7 版本中增加了对数据类型的支持

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


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

 SHOW VARIABLES LIKE 'version'

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

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


在我看来,错误是在标记 SQL 语法中的问题'json。这就是我们期望找到有效数据类型的地方。我的建议作为测试,用已知的良好数据类型替换它,旨在确定这是否是问题所在。

从错误信息来看,服务器似乎是 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 ...

编辑

替换为jsontext错误更改为

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
                                    ^^^^^^^^^^^^^^^^^
于 2017-11-07T21:09:54.013 回答