IT
[MySQL] MySQL 특수문자 Replace 처리
뽀리님
2023. 11. 15. 13:52
MySQL 에서 LIKE로 문자열을 검색시 %, _ 가 포함된 문자열은 와일드카드 문자이기에 따로 처리가 필요하다.
WILDCARD | 설명 |
% | 0개 이상의 문자를 대신 표현할 수 있음. |
_(Under Bar) | 1개의 문자를 표현합니다. |
만약 MySQL 버전이 8.0.4 이상이라면 REGEXP_REPLACE() 함수를 써서 치환이 가능하다.(PostgreSQL 도 동일)
AND TITLE LIKE CONCAT('%', REGEXP_REPLACE( #{title}, '([%_])', '\\\1','g'), '%')
하지만, 버전이 낮을 경우 저 함수를 쓸 수가 없다. 그렇다면 어떻게 처리하는게 좋을까?
1. MySql 다른 함수 써서 처리하기. (ESCAPE 함수)
AND TITLE LIKE CONCAT('%#', #{title}, '%') ESCAPE '#'
마찬가지로 특수문자(_,%)가 왔을 경우 동일하게 처리해준다.
2. JAVA 내에서 처리하기.
public class EscapeHelper {
public static String escape(String s) {
return StringUtils.hasText(s) ?
s.replaceAll("([%_])", "\\\\$1") : s;
}
}
본인이 편한방법으로 하면 될꺼같다.
나는 1로 했다.