반응형

SQLite에서 테이블에 문자열 값을 저장할 때는 작은 따옴표(')로 묶어서 작성되지만, 문자열에 작은 따옴표가 포함되어 있는 경우에는 이스케이프(escape) 처리가 필요하다. 여기에서는 문자열을 이스케이프 처리하는 방법에 대해 설명한다.

문자열에 이스케이프 처리

SQLite에서 문자열 값을 작성하려면 다음과 같이 값을 작은 따옴표(')로 묶어 작성한다.

'문자열'

큰 따옴표(")로 묶으면 식별자가 된다. 문자열을 작성해야 하는 곳에 식별자를 작성하게 되면 문자열처럼 취급되기 때문에 큰 따옴표로 묶으면 문자열로 처리되는 것처럼 보이지만, 문자열은 작은 따옴표로 묶어야 한다.

작은 따옴표가 구분 문자로 사용되기 때문에, 문자열에 작은 따움표가 포함 된 경우는 이스케이프 처리가 필요하다.

테스트를 위해 다음과 같이 테이블을 만든다.

create table test (val text);

이전에 같은 이름의 테스트 테이블이 있다면 먼저 삭제하고 생성한다.

sqlite> drop table test;
sqlite> create table test (val text);
sqlite>

다음과 작은 따움표가 포함된 문자열을 저장한다고 해보자.

I'm a student.

이 문자열을 테이블에 저장하기 위해 다음과 같이 실행하면 에러가 발생하지 않지만 SQL 문이 완결되지 않아 입력을 기다리고 있는 상태가 된다. 이는 어디서부터 어디까지가 문자열인지 알 수 없기 때문이다.

insert into test values('I'm a student.');
sqlite> insert into test values('I'm a student.');
   ...> 
   ...> ';
Error: near "m": syntax error
sqlite> 

작은 따움표가 포함된 문자열의 경우는 문자열에 작은 따움표(') 앞에 작은 따움표(')를 한번 더 작성하여 이스케이프를 처리한다. 다음과 같이 작성하면 된다.

insert into test values('I''m a student.');
sqlite> 
sqlite> insert into test values('I''m a student.');
sqlite> 

이번에는 무사히 값을 저장되었다. 확인을 위해 테이블 값을 조회해 보자.

select * from test;
sqlite> select * from test;
I'm a student.

저장되는 값이 이스케이프 처리를 하지 않으면 제대로 저장이 되지 않은 것을 확인 하였다. 이렇게 문자열에 작은 따옴표가 포함된 경우는 꼭 이스케이프 처리를 해야 한다는 것을 잊지 말도록 하자.

반응형

+ Recent posts