アポストロフィを含む値を挿入するための正しいSQL構文は何ですか?
Insert into Person
(First, Last)
Values
'Joe',
'O'Brien'
Oの後のアポストロフィが値の終了タグであるため、エラーが発生し続けます。
アポストロフィを含む値を挿入するための正しいSQL構文は何ですか?
Insert into Person
(First, Last)
Values
'Joe',
'O'Brien'
Oの後のアポストロフィが値の終了タグであるため、エラーが発生し続けます。
回答:
SQLでアポストロフィをエスケープします(つまり、単一引用符をダブルアップします)。
INSERT INTO Person
(First, Last)
VALUES
('Joe', 'O''Brien')
/\
right here
同じことがSELECTクエリにも当てはまります。
SELECT First, Last FROM Person WHERE Last = 'O''Brien'
アポストロフィ、つまり単一引用符は、文字列データの開始と終了を指定するSQLの特殊文字です。つまり、それをリテラル文字列データの一部として使用するにescape
は、特殊文字を使用する必要があります。単一引用符を使用すると、これは通常、引用符を2倍にすることで達成されます。(単一引用符ではなく、二重引用符ではなく、2つの単一引用符文字。)
注:この問題について心配する必要があるのは、生のSQLインターフェースを介して手動でデータを編集する場合のみです。開発およびテスト以外でクエリを作成することはまれです。コードには、特殊文字のエスケープ、SQLインジェクションなどを処理するテクニックとフレームワーク(スタックによって異なります)があります。
あなたはただ一重引用符を倍にする必要があります...
insert into Person (First, Last)
values ('Joe', 'O''Brien')
単一引用符は文字列の開始と終了を示すために使用されるため、あなたはそれを脱出する必要があります。
短い答えは''
、SQLデータベースが値を格納するために、2つの単一引用符を使用すること'
です。
REPLACEを使用して入力値を無害化する方法を見てください。
を確認し''''
、''''''
単一の引用符をエスケープするために文字列内に存在する場合はそれらを置き換えます。
エダフィは良い考えを持っていました。彼は自分のコード例でそれを逆にしただけです。JavaScriptまたはSQLiteのいずれかで、アポストロフィをアクセント記号に置き換えることができます。
彼は(たぶん私は確信している)O'Brianのアポストロフィの代わりにアクセント記号を文字列の区切り文字として配置しました。これは実際、ほとんどの場合、非常にシンプルなソリューションです。
アポストロフィ文字は、アポストロフィのASCIIテーブルルックアップ値39 を指定してCHAR関数を呼び出すことで挿入できます。次に、文字列値を連結演算子で連結できます。
Insert into Person
(First, Last)
Values
'Joe',
concat('O',char(39),'Brien')
値を二重引用符で囲みます。
insert into Person (First, Last) Values("Joe","O'Brien")
He said, "Don't!"
一重引用符や二重引用符を使用するなど、文字列を挿入する方法にも対処する必要があります。これは次のように実行できます:'He said, "Don''t!"'
または"He said, ""Don't!"""
。回答が承認された長年の質問に新しい回答を追加する場合は、新しく完全な情報を提供する必要があります。二重引用符の使用は新しいものですが、一部のDBMSに限定されています。あなたはそれらを受け入れるそれらの少なくとも1つを識別するために骨の折れるべきです。
代わりに(〜キーで)バックティックを使用してください。
`O'Brien`