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로 했다.