이 에러는 SQL쿼리를 날리는 도중 쿼리의 문법이 잘못되었다는 오류이다. 시퀄라이즈를 쓰고 있었기 때문에 어떤 부분에서 에러가 나는지를 찾아야했는데
Sequelize에서 You have an error in your SQL syntax 에러 해결 방법
문제 상황
아래는 문제가 발생한 코드이다. 유저 모델을 정의하는 코드인데, 여기서 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'true' at line 1 이런 오류가 발생하면서 유저 테이블이 생기지 않는 문제이다.
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class User extends Model {
static associate(models) {
}
}
User.init({
username: DataTypes.STRING,
email: DataTypes.STRING,
password: DataTypes.STRING
}, {
sequelize,
modelName: 'User',
initialAutoIncrement: true,
timestamps: false,
});
return User;
};
에러 메시지는 아래와 같이 출력됐다.
code: 'ER_PARSE_ERROR',
errno: 1064,
sqlState: '42000',
sqlMessage: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'true' at line 1",
sql: 'CREATE TABLE IF NOT EXISTS `Users` (`id` INTEGER NOT NULL auto_increment , `username` VARCHAR(255), `email` VARCHAR(255), `password` VARCHAR(255), PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=true;',
parameters: undefined
오래 걸린 이유
에러 메시지를 읽어보면 MySQL 서버 버전에 해당하는 매뉴얼을 참고하여 1행의 'true' 근처에 올바른 구문을 사용하십시오. 라고 하는데 이 말이 무슨 말인지 처음에 이해를 잘 못했던게 오래 걸린 이유였다.
그래서 처음에는 Mysql 버전이나 Sequelize 버전 문제인 줄 알고 삽질을 했으나 오류메시지를 믿었어야했다. 이건 구문 문제였다.
해결 방법
에러메시지에 포함된 sql 속성의 쿼리문을 보면 CREATE TABLE IF NOT EXISTS `Users` (`id` INTEGER NOT NULL auto_increment , `username` VARCHAR(255), `email` VARCHAR(255), `password` VARCHAR(255), PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=true; 이렇게 되어있는데, id 컬럼에 auto_increment가 이미 포함되어있는데 마지막에도 한번더 AUTO_INCREMENT=true; 로 명시되어있다.
공식문서를 찾아보니 시퀄라이즈 모델을 정의할 때 컬럼의 속성에 추가하는 auto_increment는 boolean 값으로 true or false가 들어가는게 맞지만, option으로 넣는initialAutoIncrement는 boolean 타입이 아닌 string 타입으로 auto_increment가 시작되는 초기값을 지정해주는 옵션이었다.
타입 문제로 테이블이 생기지 않는 문제였는데 오늘도 타입스크립트를 써야하는 이유를 한 개 더 찾은 것 같다.
'Web > Backend' 카테고리의 다른 글
[Pug] mixin pug 파일 html로 변환하는 방법 pug.compile 메서드 (0) | 2024.08.29 |
---|---|
[Linux] 로컬 환경에서 가상 MySQL 서버 환경으로 원격 접속 실패 오류 해결 방법 (0) | 2024.08.26 |
oraciondev 님의 블로그 입니다.
안녕하세요