10

我试图在我的 sql server 上运行以下查询:

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
);

我的 e_store 数据库中已经有品牌和类别表。

但我收到以下错误:

#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
4

4 回答 4

15

对于那些面临与我类似的问题的人:

LONGTEXTMariaDB 本身并没有实现 JSON 数据类型,但出于兼容性原因,它使用它作为别名。根据文档(https://mariadb.com/kb/en/library/json-data-type/):

JSON 是为了与 MySQL 的数据类型LONGTEXT兼容而引入的别名。JSONMariaDB 实现了这一点LONGTEXT,因为 JSON 数据类型与 SQL 标准相矛盾,而且 MariaDB 的基准表明性能至少是相当的。

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

因此,如果您对JSONMariaDB 中的数据类型有疑问,只需更改为LONGTEXT. ;-)

于 2018-08-09T20:28:45.517 回答
3

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

MySQL 5.7 引入了JSON与您的语法匹配的数据类型。

MariaDB 10.0.16 引入了一个ENGINE=CONNECT table_type=JSON与您尝试的语法不匹配的语法。

于 2017-02-12T20:49:08.660 回答
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
);
于 2017-02-12T08:56:01.817 回答
1

我认为您收到 JSON 数据类型的错误。

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

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

您可以使用以下查询检查 vesrion。

select version() as 'mysql version'
于 2017-02-12T09:09:03.947 回答