source

#1064 - SQL 구문에 오류가 있습니다.MariaDB 서버에 대응하는 메뉴얼을 확인해 주세요.

gigabyte 2022. 9. 15. 22:54
반응형

#1064 - SQL 구문에 오류가 있습니다.MariaDB 서버에 대응하는 메뉴얼을 확인해 주세요.

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

저와 비슷한 문제를 겪고 있는 분들의 경우:

MariaDB는 기본적으로 JSON 데이터 유형을 구현하지 않지만 JSON을 에일리어스로 사용합니다.LONGTEXT호환성을 위해.매뉴얼(https://mariadb.com/kb/en/library/json-data-type/):

JSON은 의 에일리어스입니다LONGTEXTMySQL과의 호환성을 위해 도입되었습니다.JSONdata type 입니다.MariaDB는 이 기능을LONGTEXT오히려 JSON 데이터 유형이 SQL 표준과 모순되고 MariaDB의 벤치마크에서 성능이 최소한 동등하다는 것을 알 수 있습니다.

유효한 json 문서가 삽입되도록 하기 위해 JSON_VALID 함수를 CHECK 제약으로 사용할 수 있습니다.

이 때문에 문제가 있는 경우JSONMariaDB의 데이터 유형, 단순히 변경만 하면 됩니다.LONGTEXT. ;-)

"JSON" 가 서버에서 해석됩니다. JSON차이점 중 하나입니다.

MySQL 5.7은JSON구문과 일치하는 datatype을 지정합니다.

MariaDB 10.0.16은ENGINE=CONNECT table_type=JSON시도된 구문과 일치하지 않습니다.

JSON 데이터 타입에 오류가 발생하고 있는 것 같습니다.

Mysql 5.7의 경우 아래 링크에서 도움을 받을 수 있습니다.

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

아래 쿼리를 사용하여 verriion을 확인할 수 있습니다.

select version() as 'mysql version'

인덱스 정의에 백틱 대신 작은 따옴표를 지정했습니다.

이것을 시험해 보세요.

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

언급URL : https://stackoverflow.com/questions/42185598/1064-you-have-an-error-in-your-sql-syntax-check-the-manual-that-corresponds

반응형