【问题标题】:#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server#1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器相对应的手册
【发布时间】:2017-06-30 08:22:38
【问题描述】:

我试图在我的 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
);

我的 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

【问题讨论】:

  • 您使用的是哪个版本的数据库..?
  • 我正在使用 XAMPP,10.1.19-MariaDB
  • 选择版本;
  • 你使用 MariaDB 而不是你为什么标记“mysql”?
  • @denny MariaDB 辩证地仍然足够接近。这是一种罕见的分歧

标签: sql mariadb mariadb-10.1


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      您在索引定义中给出了单引号而不是反引号

      试试这个:

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

      【讨论】:

      • 这不是我想的解决方案,因为我已经检查过了..没有任何结果。 ..意味着我遇到了同样的错误
      【解决方案4】:

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

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

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

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

      select version() as 'mysql version'
      

      【讨论】:

      • @scaisEdge MariaDB 10.0.16 中的JSON table type 与 JSON 列完全无关。
      猜你喜欢
      • 2018-11-28
      • 2018-11-09
      • 1970-01-01
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      • 2019-05-29
      相关资源
      最近更新 更多