1. ホーム

[解決済み】SQLiteクエリで使用するためのシングルクォート文字のエスケープ

2022-04-11 09:04:47

質問

データベーススキーマ(今のところ1つのテーブルのみ)と、そのテーブルのINSERT文を1つのファイルに書きました。そして、次のようにデータベースを作成しました。

$ sqlite3 newdatabase.db
SQLite version 3.4.0
Enter ".help" for instructions
sqlite> .read ./schema.sql
SQL error near line 16: near "s": syntax error

私のファイルの16行目はこんな感じです。

INSERT INTO table_name (field1, field2) VALUES (123, 'Hello there\'s');

問題は、シングルクォートのエスケープ文字です。シングルクォートを二重にエスケープすることも試してみました。 \\\' の代わりに \' ) を使っていますが、これもうまくいきませんでした。私は何を間違えているのでしょうか?

解決方法は?

シングルクォートを二重にしてみてください(多くのデータベースはそのように想定しています)、そうすると :

INSERT INTO table_name (field1, field2) VALUES (123, 'Hello there''s');

引用元 ドキュメント :

文字列定数は、文字列を一重引用符(')で囲むことによって形成されます。文字列内のシングルクォートは、パスカルのようにシングルクォートを2つ並べることでエンコードすることができます。バックスラッシュ文字を用いたC言語スタイルのエスケープは、標準SQLではないため、サポートされていません。BLOBリテラルは16進数データを含む文字列リテラルで、先頭に1つの "x" または "X" 文字が付きます ... リテラル値は、トークン "NULL"にすることもできます。