Строка представляет собой последовательность символов, заключенных либо в
одинарные кавычки (''') - апострофы, либо в двойные кавычки ('"'). При
использовании диалекта 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-последовательности:
-
NULASCII 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 предоставляют определенную возможность использования символов-заменителей, что позволяет вносить специальные маркеры в строку запроса и затем связывать с ними значения данных при выдаче результатов запроса.