본문 바로가기

mysql

h2 database의 mysql모드에 대해

h2로 테스트를 짜던도중,mysql의 전문검색(full test search)테스트를 짜는데

org.h2.jdbc.JdbcSQLSyntaxErrorException: Function "MATCH" not found; SQL statement:

예외가 계속 발생하는게 아니겠는가

 

예외를 읽어보고 처음엔

아 h2의 mysql모드설정을 안했구나 하고 프로퍼티파일에 가서

spring.datasource.url: jdbc:h2:mem:testdb;MODE=MySQL 를 설정을 했다

 

그래도 해당예외가 계속뜨길래 혹시 저기능이 h2에서 지원하지 않나 하고 따로 h2를 띄우고 mysql도 하나띄우고 쿼리를 날려가면서

select * from post where match(title) against('bc -ef' in boolean mode)

비교해보니 mysql에선 정상동작하고,h2에선 not found 에러가 떴다

( jdbc:h2:mem:testdb 과 jdbc:h2:mem:testdb;MODE=MySQL둘다)

 

그리고 db문제라는걸 확정짓고나서 다른함수들도 테스트해보니

select * from post where isnull(title) 같은 쿼리들도 h2에서는 같은 예외가 발생했다(mysql에 존재하고 ansisql에는 없는함수)

 

그리고나서 h2도큐먼트에서 찾아보니

즉 저 기능은 따로 뭐 함수같은걸 구현해주는게 아닌,단순히 안시sql에서 벗어난 대소문자 구분이나 이런 자질구레한것들을 해당 db표준으로 맞춰주는기능이었다

 

생각해보면 해당db의 모든함수들을 구현해줄리가 없었는데싶다

 

그래서 남은건 저테스트를 어떻게짜지만 남았다

도커로 mysql 띄워야하나?

 

 

 

 

참고

http://www.h2database.com/html/features.html#compatibility

 

Features

  Features Feature List H2 in Use Connection Modes Database URL Overview Connecting to an Embedded (Local) Database In-Memory Databases Database Files Encryption Database File Locking Opening a Database Only if it Already Exists Closing a Database Ignore

www.h2database.com