文字列は、単一引用符
(‘'
’)または二重引用符(‘"
’)で囲まれた文字の並び(シーケンス)です(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 によって自動で行われます。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.