поиск:
Полезные ссылки

  • Форум по MySQL

  • Статьи по MySQL

  • Вопросы по MySQL

  • MySQL.com


  • Базы данных

  • MySQL

  • PostgreSQL


  • PHP конференция 2005
    Подробности!

    6.1.1.1. Cтроки

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

     
    © 1997-2005 PHP Club Team
    Rambler's Top100