728x90
반응형
프로젝트를 진행하면서 BTS로 _, %로 검색시 검색이 제대로 안된다는 내용이 등록되었다.
해당 내용을 해결하기 위해 구글링 하던 도중 아래와 같은 내용을 찾게 되었다.
http://okjsp.pe.kr/seq/2372
'_', '%'와 같은 문자들이 검색을 하기 위한 wild 문자로 사용되지 않고 리터럴 문자로 사용되기 위해서는 뒤에 escape '\' 와 같이 사용해 주어야 한다는 것이다.
즉 다음과 같이 사용하면 되는 것이다.
사용하고 있는 DB는 CUBRID 였으며, 위와 같이 할 경우 잘 동작 되었다.
위 내용을 수정하면서 SQL Injection 위험이 있던 '%$keyword$%' 부분도 '%#keyworkd#%'로 바꾸게 되었다.
하지만 이 과정 중에 ibatis가 자체적으로 #keyword#를 'keyword'로 바꾸기 때문에 결과에서는 '%'keyword'%'가 되므로 수정해 주어야 했다.
MySQL이라면 CONCAT과 같은 함수를 써서 다음과 같이 하면 된다.
하지만 CUBRID에는 CONCAT 함수가 없다. 관련해서 또다시 검색해 보니 Java에서 String을 이어 붙이기 하는 것과 같은 방법을 사용하면 되었다.
즉 CUBRID에서는 다음과 같이 하면 된다.
오늘도 삽질을 통해 또 하나의 깨달음을 얻게 되었다.
해당 내용을 해결하기 위해 구글링 하던 도중 아래와 같은 내용을 찾게 되었다.
http://okjsp.pe.kr/seq/2372
'_', '%'와 같은 문자들이 검색을 하기 위한 wild 문자로 사용되지 않고 리터럴 문자로 사용되기 위해서는 뒤에 escape '\' 와 같이 사용해 주어야 한다는 것이다.
즉 다음과 같이 사용하면 되는 것이다.
LIKE '%검색어\_\%% escape '\'
사용하고 있는 DB는 CUBRID 였으며, 위와 같이 할 경우 잘 동작 되었다.
위 내용을 수정하면서 SQL Injection 위험이 있던 '%$keyword$%' 부분도 '%#keyworkd#%'로 바꾸게 되었다.
하지만 이 과정 중에 ibatis가 자체적으로 #keyword#를 'keyword'로 바꾸기 때문에 결과에서는 '%'keyword'%'가 되므로 수정해 주어야 했다.
MySQL이라면 CONCAT과 같은 함수를 써서 다음과 같이 하면 된다.
LIKE CONCAT('%', #keyword# '%')
하지만 CUBRID에는 CONCAT 함수가 없다. 관련해서 또다시 검색해 보니 Java에서 String을 이어 붙이기 하는 것과 같은 방법을 사용하면 되었다.
즉 CUBRID에서는 다음과 같이 하면 된다.
LIKE '%' + #keyword# + '%'
오늘도 삽질을 통해 또 하나의 깨달음을 얻게 되었다.
728x90
반응형
'Java > Etc' 카테고리의 다른 글
List에서 특정 요소 제거하기 (0) | 2016.02.11 |
---|---|
Site-mesh에서 excludes 정의가 적용 되지 않을 경우 (0) | 2010.05.14 |
ActiveMQ 사용하기 (0) | 2010.03.23 |
Java addCookie 삽질기 (0) | 2010.03.10 |