CUBRID는 특수 문자를 이스케이프(escape)하는 방법을 두 가지 지원한다. 하나는 따옴표를 이용한 방법이고, 다른 하나는 백슬래시(\)를 이용한 방법이다.
cubrid.conf의 시스템 파라미터 ansi_quotes가 no로 설정되어 있으면 문자열을 감쌀 때 큰따옴표(")와 작은따옴표(') 둘 다 사용할 수 있다. ansi_quotes 파라미터의 기본값은 yes로, 문자열을 감쌀 때 작은따옴표만 사용할 수 있다. 아래 설명에서 2와 3은 ansi_quotes 값이 no일 때에만 적용된다.
백슬래시(\)를 이용한 이스케이프는 cubrid.conf의 시스템 파라미터 no_backslash_escapes를 no로 설정했을 때에만 사용할 수 있다. no_backslash_escapes 파라미터의 기본값은 yes이다. 입력값에 따라 다음과 같은 특수 문자를 의미한다.
다른 모든 이스케이프에 대해서는 백슬래시가 무시된다. 예를 들어 "\x"는 그냥 "x"라고 입력한 것과 같다.
\%와 \_는 LIKE와 같은 패턴 매칭 구문에서 퍼센트 기호와 언더바를 찾을 때 쓰이며, 백슬래시가 없으면 와일드카드 문자(wildcard character)로 쓰인다. 패턴 매칭 구문 밖에서는 와일드카드 문자가 아닌 일반 문자열 "\%"와 "\_"로 그대로 쓰인다. 자세한 내용은 LIKE 조건식을 참고한다.
다음은 cubrid.conf의 시스템 파라미터 ansi_quotes가 no이고 no_backslash_escapes가 no일 때 이스케이프를 수행한 결과이다.
SELECT STRCMP('single quotes test('')', 'single quotes test(\')');
strcmp('single quotes test('')', 'single quotes test('')')
=============================================================
0
SELECT STRCMP("\a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z", "a\bcdefghijklm\nopq\rs\tuvwxyz");
strcmp('abcdefghijklm
s uvwxyz', 'abcdefghijklm
s uvwxyz')
=====================================================================
0
SELECT LENGTH('\\');
char_length('\')
===================
1
다음은 cubrid.conf의 시스템 파라미터 ansi_quotes가 yes이고 no_backslash_escapes가 yes일 때 이스케이프를 수행한 결과이다.
SELECT STRCMP('single quotes test('')', 'single quotes test(\')');
In the command from line 2,
ERROR: unterminated string
In the command from line 2,
ERROR: syntax error, unexpected UNTERMINATED_STRING
SELECT STRCMP("\a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z", "a\bcdefghijklm\nopq\rs\tuvwxyz");
In line 1, column 18,
ERROR: [\a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z] is not defined.
In line 1, column 18,
ERROR: [a\bcdefghijklm\nopq\rs\tuvwxyz] is not defined.
SELECT LENGTH('\\');
char_length('\\')
====================
2
다음은 cubrid.conf의 시스템 파라미터 ansi_quotes가 yes이고 no_backslash_escapes가 no일 때 이스케이프를 수행한 결과이다.
CREATE TABLE t1 (a varchar(200));
INSERT INTO t1 VALUES ('aaabbb'), ('aaa%');
SELECT a FROM t1 WHERE a LIKE 'aaa\%' escape '\\';
a
======================
'aaa%'