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
'mysql' 카테고리의 다른 글
non-repeatable read 와 phantom read의 차이점 (0) | 2024.11.18 |
---|---|
mysql의 트랜잭션 2개의 경합시 동작 (0) | 2024.10.31 |
mysql에서 인덱스로 작업범위를 줄일수있는 조건 (0) | 2023.12.01 |