文字列のエスケープ処理

広告

SQLiteでテーブルに文字列の値を格納する時にはシングルクオーテーションで囲って記述しますが、文字列の中にシングルクオーテーションが含まれている場合にはエスケープ処理が必要となります。ここでは文字列に対してエスケープ処理を行う方法について解説します。

SQLiteで文字列の値を記述する場合は次のように値をシングルクォーテーションで囲んで記述します。

'文字列'
ダブルクォーテーションで囲んだ場合は識別子となります。文字列を記述すべき箇所に識別子を記述すると文字列のように扱われるためダブルクォーテーションで囲んでも文字列として処理されているように見えますが、文字列はシングルクォーテーションで囲んで下さい。

シングルクオーテーションが区切りの文字として使用されるため、文字列の中にシングルクオーテーションが含まれる場合はエスケープ処理が必要となります。例えば次のような文字列を記述する場合で考えてみます。

I'am a student.

この文字列をテーブルに格納するために次のように記述するとエラーにはならないのですが処理が完了しません。

insert into test values('I'am a student.');

どこからどこまでが文字列なのか分からないためです。このような場合には、文字列の中のシングルクオーテーション(')の前に「'」を記述してエスケープ処理を行います。

insert into test values('I''am a student.');

文字列の中に「'」が2つ連続で現れた場合は、「'」は文字列を囲うために使用される「'」ではなく一つの文字としての「'」として扱われます。

では実際に試してみます。次のようなテーブルを作成しました。

create table test(val text);

p4-1

最初にシングルクオーテーションが含まれる文字列をエスケープ処理を行わずに値を格納してみます。

insert into test values('I'am a student.');

p4-2

エラーにはならないのですがSQL文が完結していないため入力を待っている状態となります。次のように無理やり終わるように入力するとエラーとなります。

p4-3

次に文字列の中に含まれるシングルクオーテーションに対してエスケープ処理を行った上で値を格納してみます。

insert into test values('I''am a student.');

p4-4

今度は無事値を格納することができました。確認の為、テーブルの値を取得してみます。

p4-5

格納されている値はエスケープ処理をする前の文字列だけが格納されていることが確認できます。このように文字列の中にシングルクオーテーションが含まれる場合にはエスケープ処理を行うことを忘れないで下さい。

( Written by Tatsuo Ikura )