:: DEVELOPER ZONE
文字列は、単一引用符 (''')または二重引用符('"')で囲まれた文字の並び(シーケンス)です(ANSI モードでの実行時は引用符のみ)。次に例を示します。
'a string' "another string"
一部のシーケンスは、個々の文字列内で特別な意味を持ちます。これらのシーケンスは、いずれも、エスケープ文字として知られるバックスラッシュ('\')で始まります。MySQL では、次のエスケープシーケンスが認識されます。
\0
ASCII 0(NUL)文字。
\'
単一引用符(''')。
\"
二重引用符('"')。
\b
バックスペース文字。
\n
改行文字(LF)。
\r
復帰改行文字(CR)。
\t
タブ文字。
\z
ASCII(26)(Control-Z)。この文字をコード化することによって、ASCII(26) が Windows では END-OF-FILE を表すという問題を回避することができる(ASCII(26) では、mysql database < filename を使用する場合に問題が発生する)。
\\
バックスラッシュ('\')文字。
\%
'%' 文字。これは、'%' をそのまま使用したときにワイルドカード文字として解釈されてしまうコンテキストで '%' 自体を検索する場合に使用する。 See 項6.3.2.1. 「文字列比較関数」。
\_
'_' 文字。これは、'_' をそのまま使用したときにワイルドカード文字として解釈されてしまうコンテキストで '_' 自体を検索する場合に使用する。 See 項6.3.2.1. 「文字列比較関数」。
文字列の一部のコンテキストでは、'\%' または '\_' を使用したときに、'%' と '_' の代わりに、文字列 '\%' と '\_' がそれぞれ返されることに注意してください。
文字列に引用符を含める方法は、いくつかあります。
''' で囲んだ文字列内で ''' を使用する場合、文字列内の ''' は '''' と記述することができる。
'"' で囲んだ文字列内で '"' を使用する場合、文字列内の '"' は '""' と記述することができる。
引用符の直前にエスケープ文字('\')を使用することができる。
'"' で囲んだ文字列内で ''' を使用する場合は、''' を 2 つ続けて入力したり、エスケープしたりなどの特別な処置を行う必要はない。同様に、''' で囲んだ文字列内で '"' を使用する場合も、特別扱いする必要はない。
次の SELECT ステートメントは、文字列の引用とエスケープが実際にどのように働くかを示しています。
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+
文字列のカラム(BLOB など)にバイナリデータを挿入する場合、次の文字はエスケープシーケンスを使って表現する必要があります。
NUL
ASCII 0。この文字は '\0' (バックスラッシュ + ASCII '0' 文字)で表現する。
\
ASCII 92、バックスラッシュ。'\\' として表現する。
'
ASCII 39、単一引用符。'\'' として表現する。
"
ASCII 34、二重引用符。'\"' として表現する。
C コードを書く場合は、INSERT ステートメントの文字をエスケープする目的で C API 関数 mysql_real_escape_string() を使用できます。See 項11.1.2. 「C API 関数の概要」。Perl では、DBI パッケージの quote メソッドを使用して、特殊文字を適切なエスケープシーケンスに変換することができます。See 項11.5.2. 「DBI インタフェース」。
上記の特殊文字のいずれかが含まれている可能性がある文字列には、必ずエスケープ関数を使用するようにします。
または、MySQL API の多くのものが一種のプレースホルダ機能を備えているため、この機能を使ってクエリ文字列に特殊なマーカーを挿入し、クエリの発行時にデータ値をそれらのマーカーにバインドすることもできます。この場合、値内の特殊文字のエスケープ処理が API によって自動で行われます。
© 1995-2005 MySQL AB. All rights reserved.
