Строки


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

  • \\

    Символ обратного слеша.

  • \%

    Символ процентов %. Используется для поиска копий литерала % в контекстах, где выражение % в противном случае интерпретировалось бы как групповой символ (Функции сравнения строк).

  • \'_'

    Символ подчеркивания _. Используется для поиска копий литерала _ в контекстах, где выражение _ в противном случае интерпретировалось бы как групповой символ (Функции сравнения строк).

Обратите внимание на то, что при использовании '\%' или '\_' в контекстах некоторых строк будут возвращаться значения строк '\%' и '\_', а не % и _.

Существует несколько способов включить кавычки в строку:

  • Одиночная кавычка (апостроф) ' внутри строки, заключенной в кавычки ', может быть записана как ''''.

  • Двойная кавычка " внутри строки, заключенной в двойные кавычки ", может быть записана как '""'.

  • Можно предварить символ кавычки символом экранирования (\).

  • Для символа ' внутри строки, заключенной в двойные кавычки, не требуется специальной обработки; его также не требуется дублировать или предварять обратным слешем. Точно так же не требует специальной обработки двойная кавычка " внутри строки, заключенной в одиночные кавычки '.

Ниже показаны возможные варианты применения кавычек и 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 (Обзор функций интерфейса C). При программировании на Perl можно использовать метод quote из пакета DBI для превращения специальных символов в соответствующие escape-последовательности (Интерфейс DBI).

Не следует забывать, что указанное свойство escape-символа должно использоваться во всех строках, которые могут содержать любые специальные символы, перечисленные выше.

В качестве альтернативы многие интерфейсы прикладного программирования (API) для MySQL предоставляют определенную возможность использования символов-заменителей, что позволяет вносить специальные маркеры в строку запроса и затем связывать с ними значения данных при выдаче результатов запроса.

Навигация