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 吗?或者我的问题是别的什么?
如果我删除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 回答
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服务器的版本:
作为测试,您可以将
JSON
数据类型替换为您知道支持的其他数据类型,例如 .VARCHAR(20)
或TEXT
.如果MySQL / MariaDB服务器不支持
json
数据类型,则可以使用其他文本类型 .在我看来,错误是在
'json
的SQL语法中标记问题 . 并且's where we'期望找到有效的数据类型 . 我的建议作为测试,用已知的良好数据类型替换它,旨在确定问题是否存在 .从错误消息,似乎服务器是MariaDB(而不是MySQL)
我们看到正在执行的语句:
而错误
以及标记错误的位置
EDIT
用
text
替换json
会将错误更改为看起来很奇怪,因为在
json
语法错误的语句中是什么这本来有用,但由于某些原因,现在改为
该字符串值
'CURRENT_DATE'
不是时间戳的有效值 . 看起来我们打算引用关键字CURRENT_TIMESTAMP
,而不是字符串文字