航海者数据库和 MariaDB 服务器
voyager databases and MariaDB server
10.1.28-MariaDB
我正在尝试在 Voyager 管理面板中创建一个新的 table,但我一直收到错误消息:
generic.exception: An exception occurred while executing '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, created_at timestamp null DEFAULT NULL, updated_at timestamp ' at line 1
或 SQL 语法错误 的某些变体,具体取决于我正在尝试的内容。
我正在使用 Xampp 并且还没有安装 MariaDB 服务器 我需要使用 MariaDB 服务器?还是我的问题是别的?
screenshot of the table
如果我删除 json 数据类型,错误将变为:
generic.exception: An exception occurred while executing '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]: Syntax error or access violation: 1067 Invalid default value for 'created_at'
JSON
数据类型是在 MySQL 5.7 中引入的。
此数据类型在 MySQL 的早期版本(5.6 或更早版本)中不可用,并且尚未在 MariaDB 中实现(至少在 10.2 版本之前,但 MariaDB 添加了一些 JSON 功能,例如 JSON_VALID.)
编辑
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 语法中的问题。这就是我们希望找到有效数据类型的地方。作为测试,我的建议是将其替换为已知的良好数据类型,目的是确定这是否是问题所在。
从错误消息来看,服务器似乎是 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 ...
编辑
用 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
^^^^^^^^^^^^^^^^^
10.1.28-MariaDB
我正在尝试在 Voyager 管理面板中创建一个新的 table,但我一直收到错误消息:
generic.exception: An exception occurred while executing '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, created_at timestamp null DEFAULT NULL, updated_at timestamp ' at line 1
或 SQL 语法错误 的某些变体,具体取决于我正在尝试的内容。
我正在使用 Xampp 并且还没有安装 MariaDB 服务器 我需要使用 MariaDB 服务器?还是我的问题是别的?
screenshot of the table
如果我删除 json 数据类型,错误将变为:
generic.exception: An exception occurred while executing '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]: Syntax error or access violation: 1067 Invalid default value for 'created_at'
JSON
数据类型是在 MySQL 5.7 中引入的。
此数据类型在 MySQL 的早期版本(5.6 或更早版本)中不可用,并且尚未在 MariaDB 中实现(至少在 10.2 版本之前,但 MariaDB 添加了一些 JSON 功能,例如 JSON_VALID.)
编辑
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 语法中的问题。这就是我们希望找到有效数据类型的地方。作为测试,我的建议是将其替换为已知的良好数据类型,目的是确定这是否是问题所在。
从错误消息来看,服务器似乎是 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 ...
编辑
用 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
^^^^^^^^^^^^^^^^^