SQLite | データ型(Data Type) | 文字列のエスケープ処理

SQLiteのテーブルに保存する文字列はシングルクォート(')で囲みます。文字列にシングルクォートが含まれる場合は、エスケープ処理が必要です。ここでは、文字列をエスケープする方法について説明します。

文字列のエスケープ処理

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> 

文字列内のシングルクォートをエスケープするには、その直前にシングルクォートをもう1つ記述します。

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.

シングルクォートを含む文字列は、エスケープしないと正しく保存できません。文字列内のシングルクォートは必ずエスケープしてください。