9.1.1 Литералы строк
Строка — это последовательность байтов или символов, заключённых в одинарные (') или двойные (") кавычки. Примеры:
'a string'
"another string"
Строки в кавычках, расположенные рядом, конкатенируются в одну строку. Следующие строки эквивалентны:
'a string'
'a' ' ' 'string'
Если включён режим SQL ANSI_QUOTES, литералы строк могут быть заключены только в одинарные кавычки, так как строки в двойных кавычках интерпретируются как идентификаторы.
Бинарная строка — это строка байтов. У каждой бинарной строки есть кодовая страница и настройка binary. Небинарная строка — это строка символов. У неё есть кодовая страница, отличная от binary, и настройка, совместимая с кодовой страницей.
Для обоих типов строк сравнения основаны на числовых значениях единиц строки. Для бинарных строк единицей является байт; сравнения используют числовые значения байтов. Для небинарных строк единицей является символ, и некоторые кодовые страницы поддерживают многобайтовые символы; сравнения используют числовые значения кодов символов. Порядок кодов символов зависит от настройки сортировки строки. (Для получения дополнительной информации см. Раздел 10.8.5, «Сравнение бинарной сортировки с _bin».)
В клиенте mysql бинарные строки отображаются в шестнадцатеричном формате, в зависимости от значения параметра --binary-as-hex. Дополнительную информацию об этом параметре см. в разделе 4.5.1, «mysql — Клиент командной строки MySQL».
Литерал символьной строки может иметь необязательный префикс кодовой страницы и COLLATE-оператор, чтобы указать, что строка использует определённую кодовую страницу и настройку сортировки:
[_charset_name]'string' [COLLATE collation_name]
Примеры:
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8'string' COLLATE utf8_danish_ci;
Можно использовать N' (или literal'n'), чтобы создать строку в национальной кодовой странице. Эти операторы эквивалентны:literal'
SELECT N'some text';
SELECT n'some text';
SELECT _utf8'some text';
Дополнительную информацию об этих форматах синтаксиса строк см. в разделе 10.3.7, «Национальная кодовая страница» и разделе 10.3.8, «Префиксы кодовых страниц».
В строке определённые последовательности имеют специальное значение, если не включён режим SQL NO_BACKSLASH_ESCAPES. Каждая такая последовательность начинается с обратной косой черты (\), называемой символом экранирования. MySQL распознаёт последовательности экранирования, показанные в таблице 9.1, «Специальные последовательности экранирования символов». Для всех остальных последовательностей обратная косая черта игнорируется. То есть экранированный символ интерпретируется так, как если бы он не был экранирован. Например, \x — это просто x. Эти последовательности чувствительны к регистру. Например, \b интерпретируется как возврат на одну позицию назад, а \B интерпретируется как B. Обработка экранирования выполняется в соответствии с кодовой страницей, указанной переменной системы character_set_connection. Это верно даже для строк, перед которыми стоит префикс, указывающий на другую кодовую страницу, как обсуждается в разделе 10.3.6, «Кодовая страница и сортировка литералов символьных строк».
Таблица 9.1 Специальные последовательности экранирования символов
| Последовательность экранирования | Символ, представляемый последовательностью |
|---|---|
\0
| Символ ASCII NUL (X'00') |
\'
| Одинарная кавычка (') |
\"
| Двойная кавычка (") |
\b
| Символ возврата на одну позицию назад |
\n
| Символ перевода строки |
\r
| Символ возврата каретки |
\t
| Символ табуляции |
\Z
| ASCII 26 (Control+Z); см. примечание после таблицы |
\\
| Обратная косая черта (\) |
\%
| Символ %; см. примечание после таблицы |
\_
| Символ _; см. примечание после таблицы |
Символ ASCII 26 может быть закодирован как \Z, чтобы обойти проблему, что ASCII 26 означает КОНЕЦ ФАЙЛА в Windows. ASCII 26 в файле вызывает проблемы, если вы пытаетесь использовать mysql
.db_name <
file_name
Последовательности \% и \_ используются для поиска буквальных вхождений % и _ в контекстах сопоставления шаблонов, где в противном случае они интерпретировались бы как символы подстановки. См. описание оператора LIKE в разделе 12.8.1, «Функции и операторы сравнения строк». Если вы используете \% или \_ вне контекстов сопоставления шаблонов, они оцениваются как строки \% и \_, а не % и _.
Существует несколько способов включения символов кавычек в строку:
Символ кавычки (
') внутри строки, заключённой в ('), может быть записан как ('').Символ кавычки (
") внутри строки, заключённой в ("), может быть записан как ("").Представьте символ кавычки символом экранирования (
\).Символ кавычки (
') внутри строки, заключённой в ("), не требует специального обращения и не должен быть удвоен или экранирован. Аналогично,"внутри строки, заключённой в ('), не требует специального обращения.
Следующие 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 |
+--------------------+
mysql> SELECT 'disappearing\ backslash';
+------------------------+
| disappearing backslash |
+------------------------+
Для вставки бинарных данных в столбец строки (такой как столбец BLOB), вы должны представлять некоторые символы последовательностями экранирования. Обратная косая черта (\) и символ кавычки, используемый для заключения строки, должны быть экранированы. В некоторых клиентских средах может также потребоваться экранировать NUL или Control+Z. Клиент mysql обрезает строки в кавычках, содержащие NUL символы, если они не экранированы, и Control+Z может быть воспринят как КОНЕЦ ФАЙЛА в Windows, если не экранирован. Последовательности экранирования для каждого из этих символов см. в таблице 9.1, «Специальные последовательности экранирования символов».
При написании приложений, любая строка, которая может содержать любой из этих специальных символов, должна быть должным образом экранирована перед использованием строки как значения данных в операторе SQL, который отправляется серверу MySQL. Это можно сделать двумя способами:
Обработать строку с помощью функции, которая экранирует специальные символы. В программе на языке C можно использовать функцию API C для экранирования символов. См. В операторах SQL, которые строят другие операторы SQL, можно использовать функцию
QUOTE(). Perl DBI-интерфейс предоставляет методquoteдля преобразования специальных символов в соответствующие последовательности экранирования. См. раздел 27.9, «API MySQL на Perl». Другие языковые интерфейсы могут предоставлять аналогичную возможность.В качестве альтернативы явного экранирования специальных символов, многие API MySQL предоставляют возможность использования подстановочных знаков, позволяющих вставлять специальные маркеры в строку оператора, а затем связывать значения данных с ними при выполнении оператора. В этом случае API позаботится об экранировании специальных символов в значениях.
© 2025 Oracle
Licensed under the GPLv2 License.