2009년 10월 29일
오라클에서 유니코드 필드의 LIKE 절 사용시 주의사항
작성자 : 김민석 ( lemonfish at gmail dot com )
요새는 하도 국제화다 뭐다 말이 많다 보니 NLS 를 통해서 유니코드를 사용할 일이 많아진다. 그러다 보니 NCLOB 니 NVARCHAR2 니 한글자 더 많이 치는 수고를 들여가며 컬럼 크기 잡을 때도 신경을 써야 하니 이만저만 귀찮은 일이 아니다.
이번 포스팅은 간단한 문자열 검색시 사용하는 LIKE 절을 유니코드가 사용된 환경에서 이용할 때 발생할 수 있는 문제점을 이야기 해보고자 한다.
ORA-01425: escape character must be character string of length 1
ORA-01425: 에스케이프 문자는 1자리 문자 문자열이어야 합니다
VARCHAR2 나 CLOB 를 사용할 경우에는 발생할 일이 없는 오류 메시지 인데 (쿼리를 정상적으로 작성했다면) 이 메시지 가 발생하는 쿼리를 예를 들자면 아래와 같다.
SELECT ID, NAME, TITLE FROM BLAH_TB WHERE TITLE LIKE '100+%' ESCAPE '+'
사실 위의 쿼리는 누가봐도 정상적이다. 물론 TITLE 컬럼이 VARCHAR2 나 CLOB 일 경우만 그렇다. 그러면 TITLE 컬럼이 NVARCHAR2 이거나 NCLOB 일 때는 도대체 뭐가 잘못된 건가? 분명히 ESCAPE 문자는 '+' 로 지정되어 있고 눈씻고 찾아봐도 두글자로 보이지는 않는다!!!
문제는 예상하다시피 TITLE 컬럼이 NVARCHAR2 이거나 NCLOB 이기 때문에 ESCAPE 문자도 N~ 계열이 되어야 한다는데 있다. 해외의 모 사이트의 포럼에서는 아래와 같은 방식으로 해결을 하던데.
SELECT ID, NAME, TITLE FROM BLAH_TB WHERE TITLE LIKE '100+%' ESCAPE '++'
위의 방식은 ESCAPE 문자를 똑같이 두번 써주는 거다. ㅋ 뭐하는 짓이삼? 아래와 같이 엘레강스 하게 해결하자.
SELECT ID, NAME, TITLE FROM BLAH_TB WHERE TITLE LIKE '100+%' ESCAPE N'+'
아... 멀티바이트 문자를 사용하는 나라의 개발자는 이리도 고달프고나~~~
# by | 2009/10/29 07:20 | 데이터베이스 | 트랙백 | 덧글(2)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
저는 저런걸 몰라서 여태 N으로 시작하는 데이터 타입은 전혀 못 써봤습니다 ㅎㅎ 대략 쥐구멍