데이터베이스

[DB / Error] Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "\000d\000a

syj0522 2024. 11. 25. 01:28

Spring Boot + JPA + In-memory h2 환경에서 레포지토리 테스트 중 다음과 같은 에러 발생

에러

더보기
더보기

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "\000d\000a    create table [*]user (\000d\000a        user_id bigint not null auto_increment,\000d\000a        birth date,\000d\000a        created_date datetime(6),\000d\000a        email varchar(255),\000d\000a        gender enum ('M','W'),\000d\000a        introduction varchar(200),\000d\000a        last_modified_date datetime(6),\000d\000a        location varchar(100),\000d\000a        mbti enum ('ENFJ','ENFP','ENTJ','ENTP','ESFJ','ESFP','ESTJ','ESTP','INFJ','INFP','INTJ','INTP','ISFJ','ISFP','ISTJ','ISTP'),\000d\000a        password varchar(255),\000d\000a        role varchar(255),\000d\000a        name varchar(45),\000d\000a        primary key (user_id)\000d\000a    ) engine=InnoDB"; expected "identifier"; SQL statement:

 create table user (
        user_id bigint not null auto_increment,
        birth date,
        created_date datetime(6),
        email varchar(255),
        gender enum ('M','W'),
        introduction varchar(200),
        last_modified_date datetime(6),
        location varchar(100),
        mbti enum ('ENFJ','ENFP','ENTJ','ENTP','ESFJ','ESFP','ESTJ','ESTP','INFJ','INFP','INTJ','INTP','ISFJ','ISFP','ISTJ','ISTP'),
        password varchar(255),
        role varchar(255),
        name varchar(45),
        primary key (user_id)
    ) engine=InnoDB [42001-224]

원인

h2의 예약어로 지정되어있는 'user'을 테이블명으로 사용했기 때문

 

해결

설정 파일에 엔티티 클래스의 이름과 컬럼을 백틱(`)으로 감싸주는 설정을 추가

spring.jpa.properties.hibernate.globally_quoted_identifiers=true

 

다시 실행해보면 아래와 같이 쿼리가 만들어지고 정상 동작

create table `user` (
        `user_id` bigint not null auto_increment,
        `birth` date,
        `created_date` datetime(6),
        `email` varchar(255),
        `gender` enum ('M','W'),
        `introduction` varchar(200),
        `last_modified_date` datetime(6),
        `location` varchar(100),
        `mbti` enum ('ENFJ','ENFP','ENTJ','ENTP','ESFJ','ESFP','ESTJ','ESTP','INFJ','INFP','INTJ','INTP','ISFJ','ISFP','ISTJ','ISTP'),
        `password` varchar(255),
        `role` varchar(255),
        `name` varchar(45),
        primary key (`user_id`)
    ) engine=InnoDB;

 

이 설정에 대한 자세한 내용은 아래 포스팅 참고

https://oigie.tistory.com/164

 

 

 

references

https://togll.tistory.com/223

https://stackoverflow.com/questions/66333101/how-to-fix-org-h2-jdbc-jdbcsqlsyntaxerrorexception-syntax-error-in-sql-statemen

https://docs.spring.io/spring-boot/reference/data/sql.html