208

データベース スキーマ (これまでのところ 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');

問題は、一重引用符のエスケープ文字です。また、一重引用符を二重にエスケープしようとしましたが(\\\'代わりに使用\')、それもうまくいきませんでした。私は何を間違っていますか?

4

7 に答える 7

335

一重引用符を 2 倍にしてみてください (多くのデータベースではそのように想定されています)、次のようになります。

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

ドキュメントからの関連引用:

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

于 2009-03-02T19:14:43.257 に答える
47

一重引用符を二重にしてエスケープしたいと思うでしょう:

INSERT INTO table_name (field1, field2) VALUES (123, 'Hello there''s');
于 2009-03-02T19:15:57.590 に答える