[에러해결] Syntax error in SQL statement ~ expected "identifier"

뱅뱅의 텃밭·2024년 1월 5일
2

에러로그:
org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "\000d\000a drop table if exists [*]user CASCADE "; expected "identifier";

상황설명:
User.java안에 @Entity 와 @Table(name = "user")로 설정되어있고, data.sqlinsert into user (~) values (~) 라고 되어있는 상태로 Spring Boot 서버를 실행했을 때 위 오류가 발생했다.
(Spring Boot 2.7.7 버전, h2database 2.1.214 버전 사용중)

찾아본 내용:
일반적인 원인은 예약된 키워드를 식별자로 사용하는 것이다.
알고보니 H2가 1.x.x에서 2.x.x로 올라오면서 'user'라는 키워드가 h2의 예약어로 사용되는 것이다.

해결방법:
1. 테이블 이름을 예약어가 아닌 것으로 @Table(name = "member") 처럼 변경하면 된다.
2. application.yml(properties) 파일에 spring.datasource.urljdbc:h2:mem:testdb;NON_KEYWORDS=USER와 같이 NON_KEYWORDS=USER를 추가해서 h2에게 예약어가 아님을 명시해준다.
3. h2database 버전을 1.4.200 으로 낮춰서 사용한다.

참조:
https://www.h2database.com/html/advanced.html#keywords
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.7-Release-Notes#h2-21
https://www.baeldung.com/spring-boot-h2-jdbcsqlsyntaxerrorexception-expected-identifier

profile
나만의 텃밭을 가꾸어보자

0개의 댓글

관련 채용 정보