Справочное руководство по MySQL
Строка представляет собой последовательность символов, заключенных либо в
одинарные кавычки (''') - апострофы, либо в двойные кавычки ('"'). При
использовании диалекта 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 section 6.3.2.1 Функции сравнения строк).
- \'_'
-
Символ подчеркивания '_'. Используется для поиска копий литерала '_' в
контекстах, где выражение '_' в противном случае интерпретировалось бы как
групповой символ (see section 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 section 8.4.2 Обзор функций интерфейса C). При программировании на Perl
можно использовать метод quote из пакета DBI для превращения специальных
символов в соответствующие escape-последовательности (see section 8.2.2 Интерфейс DBI).
Не следует забывать, что указанное свойство escape-символа должно
использоваться во всех строках, которые могут содержать любые специальные
символы, перечисленные выше.
В качестве альтернативы многие интерфейсы прикладного программирования
(API) для MySQL предоставляют определенную возможность использования
символов-заменителей, что позволяет вносить специальные маркеры в строку
запроса и затем связывать с ними значения данных при выдаче результатов
запроса.