#1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器对应的手册

问题描述 投票:0回答:5

我试图在我的 sql 服务器上运行以下查询:

CREATE TABLE `e_store`.`products`(
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
    `name` VARCHAR(250) NOT NULL ,
    `brand_id` INT UNSIGNED NOT NULL ,
    `category_id` INT UNSIGNED NOT NULL ,
    `attributes` JSON NOT NULL ,
    PRIMARY KEY(`id`) ,
    INDEX `CATEGORY_ID`(`category_id` ASC) ,
    INDEX `BRAND_ID`(`brand_id` ASC) ,
    CONSTRAINT `brand_id` FOREIGN KEY(`brand_id`) REFERENCES `e_store`.`brands`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE ,
    CONSTRAINT `category_id` FOREIGN KEY(`category_id`) REFERENCES `e_store`.`categories`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE
);

我的电子商店数据库中已经有品牌和类别表。

但是我收到以下错误:

#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 NOT NULL ,
    PRIMARY KEY(`id`) ,
    INDEX `CATEGORY_ID`('category_id' ' at line 6
sql mariadb mariadb-10.1
5个回答
20
投票

对于那些和我一样面临这个问题的人:

MariaDB 本身并不实现 JSON 数据类型,但出于兼容性原因,它使用它作为

LONGTEXT
的别名。根据文档(https://mariadb.com/kb/en/library/json-data-type/):

JSON 是

LONGTEXT
的别名,出于与 MySQL 的
JSON
数据类型的兼容性原因而引入。 MariaDB 将其实现为
LONGTEXT
,因为 JSON 数据类型与 SQL 标准相矛盾,并且 MariaDB 的基准测试表明性能至少是相当的。

为了确保插入有效的json文档,可以使用JSON_VALID函数作为CHECK约束。

因此,如果您对 MariaDB 中的

JSON
数据类型有疑问,只需更改为
LONGTEXT
即可。 ;-)


3
投票

我认为您遇到了 JSON 数据类型错误。

对于 Mysql 5.7,您可以从下面的链接获取帮助。

https://dev.mysql.com/doc/refman/5.7/en/json.html

您可以使用以下查询检查版本。

select version() as 'mysql version'

3
投票

JSON
”在服务器中解析。
JSON
是分歧点之一。

MySQL 5.7 引入了

JSON
数据类型,它与您的语法相匹配。

MariaDB 10.0.16 引入了

ENGINE=CONNECT table_type=JSON
,它与您尝试的语法不匹配。


1
投票

您在索引定义中使用了单引号而不是反引号

试试这个:

CREATE TABLE `e_store`.`products`(
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
    `name` VARCHAR(250) NOT NULL ,
    `brand_id` INT UNSIGNED NOT NULL ,
    `category_id` INT UNSIGNED NOT NULL ,
    `attributes` JSON NOT NULL ,
    PRIMARY KEY(`id`) ,
    INDEX `CATEGORY_ID`(`category_id` ASC) ,  -- Changed single quotes to backticks
    INDEX `BRAND_ID`(`brand_id` ASC) ,   -- Changed single quotes to backticks
    CONSTRAINT `brand_id` FOREIGN KEY(`brand_id`) REFERENCES `e_store`.`brands`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE ,
    CONSTRAINT `category_id` FOREIGN KEY(`category_id`) REFERENCES `e_store`.`categories`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE
);

0
投票

我们的一位客户安装时遇到了同样的问题,修复很简单 更改为长文本

© www.soinside.com 2019 - 2024. All rights reserved.