Строка представляет собой последовательность символов, заключенных либо в
одинарные кавычки (''
') - апострофы, либо в двойные кавычки ('"
'). При
использовании диалекта ANSI SQL допустимы только одинарные кавычки.
Например:
'a string' "another string"
Внутри строки некоторые последовательности символов имеют специальное
назначение. Каждая из этих последовательностей начинается обратным слешем
('\
'), известным как escape-символ или символ перехода. MySQL распознает
следующие escape-последовательности:
-
\0
Символ 0 (
NUL
) в ASCII коде. -
\'
Символ одиночной кавычки ('
'
'). -
\"
Символ двойной кавычки ('
"
'). -
\b
Возврат на один символ.
-
\n
Символ новой строки (перевода строки).
-
\r
Символ перевода каретки.
-
\t
Символ табуляции.
-
\z
Символ (Control-Z) таблицы ASCII(26). Данный символ можно закодировать, чтобы обойти проблему, заключающуюся в том, что под Windows ASCII(26) означает конец файла (проблемы возникают при использовании ASCII(26) в выражении
mysql database < filename)
. -
\\
Символ обратного слеша.
-
\%
Символ процентов '
%
'. Используется для поиска копий литерала '%
' в контекстах, где выражение '%
' в противном случае интерпретировалось бы как групповой символ (see Раздел 6.3.2.1, «Функции сравнения строк»). -
\'_'
Символ подчеркивания '
_
'. Используется для поиска копий литерала '_
' в контекстах, где выражение '_
' в противном случае интерпретировалось бы как групповой символ (see Раздел 6.3.2.1, «Функции сравнения строк»).
Обратите внимание на то, что при использовании '\%
' или '\_
' в контекстах
некоторых строк будут возвращаться значения строк '\%
' и '\_
', а не '%
' и
'_
'.
Существует несколько способов включить кавычки в строку:
Одиночная кавычка (апостроф) '
'
' внутри строки, заключенной в кавычки ''
', может быть записана как '''
'.Двойная кавычка '
"
' внутри строки, заключенной в двойные кавычки '"
', может быть записана как '""
'.Можно предварить символ кавычки символом экранирования ('
\
').Для символа '
'
' внутри строки, заключенной в двойные кавычки, не требуется специальной обработки; его также не требуется дублировать или предварять обратным слешем. Точно так же не требует специальной обработки двойная кавычка '"
' внутри строки, заключенной в одиночные кавычки ''
'.
Ниже показаны возможные варианты применения кавычек и escape-символа на примерах выполнения команды 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
),
следующие символы должны быть представлены как escape-последовательности:
-
NUL
ASCII 0. Необходимо представлять в виде '
\0
' (обратный слеш и символ ASCII '0
'). -
\
ASCII 92, обратный слеш. Представляется как '
\\
'. -
'
ASCII 39, единичная кавычка. Представляется как '
\'
'. -
"
ASCII 34, двойная кавычка. Представляется как '
\"
'.
При написании программы на языке C для добавления символов экранирования в
команде INSERT
можно использовать функцию mysql_real_escape_string()
из C
API (see Раздел 8.4.2, «Обзор функций интерфейса C»). При программировании на Perl
можно использовать метод quote
из пакета DBI для превращения специальных
символов в соответствующие escape-последовательности (see Раздел 8.2.2, «Интерфейс DBI
»).
Не следует забывать, что указанное свойство escape-символа должно использоваться во всех строках, которые могут содержать любые специальные символы, перечисленные выше.
В качестве альтернативы многие интерфейсы прикладного программирования (API) для MySQL предоставляют определенную возможность использования символов-заменителей, что позволяет вносить специальные маркеры в строку запроса и затем связывать с ними значения данных при выдаче результатов запроса.