Spec-Zone.ru › MySQL 8.4

11.1.1 Литералы строк

Строка — это последовательность байтов или символов, заключенная в одинарные (') или двойные (") кавычки. Примеры:

'a string'
"another string"

Строки в кавычках, расположенные рядом друг с другом, конкатенируются в одну строку. Следующие строки эквивалентны:

'a string'
'a' ' ' 'string'

Если включен режим SQL ANSI_QUOTES, то литералы строк могут быть заключены только в одинарные кавычки, поскольку строки в двойных кавычках интерпретируются как идентификаторы.

Бинарная строка — это строка байтов. У каждой бинарной строки есть заданный набор символов и сортировка, обозначаемая как binary. Небинарная строка — это строка символов. У нее есть набор символов, отличных от binary, и сортировка, совместимая с набором символов.

Для обоих типов строк сравнения основаны на числовых значениях единиц строки. Для бинарных строк единицей является байт; сравнения используют числовые значения байтов. Для небинарных строк единицей является символ, и некоторые наборы символов поддерживают многобайтовые символы; сравнения используют числовые значения кодов символов. Порядок кодов символов зависит от сортировки строки. (Дополнительную информацию см. в разделе Раздел 12.8.5, «Сравнение бинарной сортировки с _bin сортировками».)

Примечание

В клиенте mysql бинарные строки отображаются с использованием шестнадцатеричного представления, в зависимости от значения --binary-as-hex. Дополнительную информацию об этом параметре см. в разделе Раздел 6.5.1, «mysql — Клиент командной строки MySQL».

Литерал строкового символа может иметь необязательный идентификатор набора символов и COLLATE предложение, чтобы указать, что это строка, использующая определенный набор символов и сортировку:

[_charset_name]'string' [COLLATE collation_name]

Примеры:

SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;

Вы можете использовать N'literal' (или n'literal'), чтобы создать строку в национальном наборе символов. Эти операторы эквивалентны:

SELECT N'some text';
SELECT n'some text';
SELECT _utf8'some text';

Дополнительную информацию об этих форматах синтаксиса строк см. в разделе Раздел 12.3.7, «Национальный набор символов» и Раздел 12.3.8, «Идентификаторы наборов символов».

Внутри строки некоторые последовательности имеют специальное значение, если не включен режим SQL NO_BACKSLASH_ESCAPES. Каждая из этих последовательностей начинается с обратной косой черты (\), известной как символ экранирования. MySQL распознает последовательности экранирования, показанные в таблице 11.1, «Специальные последовательности экранирования символов». Для всех других последовательностей экранирования обратная косая черта игнорируется. То есть экранированный символ интерпретируется так, как будто он не был экранирован. Например, \x просто эквивалентно x. Эти последовательности чувствительны к регистру. Например, \b интерпретируется как backspace, но \B интерпретируется как B. Обработка экранирования выполняется в соответствии с набором символов, указанным переменной системы character_set_connection. Это справедливо даже для строк, перед которыми стоит идентификатор, указывающий другой набор символов, как описано в разделе Раздел 12.3.6, «Набор символов и сортировка литералов строковых символов».

Таблица 11.1 Специальные последовательности экранирования символов

Таблица 11.1 Специальные последовательности экранирования символов
Последовательность экранирования Символ, представленный последовательностью
\0 Символ ASCII NUL (X'00')
\' Символ одинарной кавычки (')
\" Символ двойной кавычки (")
\b Символ backspace
\n Символ новой строки (linefeed)
\r Символ возврата каретки
\t Символ табуляции
\Z ASCII 26 (Control+Z); см. примечание после таблицы
\\ Символ обратной косой черты (\)
\% Символ %; см. примечание после таблицы
\_ Символ _; см. примечание после таблицы

Символ ASCII 26 может быть закодирован как \Z, чтобы обойти проблему, что ASCII 26 означает конец файла в Windows. ASCII 26 внутри файла вызывает проблемы, если вы пытаетесь использовать mysql db_name < file_name.

Последовательности \% и \_ используются для поиска буквальных экземпляров % и _ в контекстах сопоставления шаблонов, где они в противном случае интерпретировались бы как символы подстановки. См. описание оператора LIKE в Разделе 14.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, если не экранирован. Последовательности экранирования, представляющие каждый из этих символов, приведены в таблице 11.1, «Специальные последовательности экранирования символов».

При написании приложений любая строка, которая может содержать любой из этих специальных символов, должна быть должным образом экранирована перед использованием строки в качестве значения данных в операторе SQL, отправленном на сервер MySQL. Это можно сделать двумя способами:

  • Обработать строку функцией, которая экранирует специальные символы. В программе на C вы можете использовать функцию API C для экранирования символов. См. . В операторах SQL, которые строят другие операторы SQL, вы можете использовать функцию QUOTE(). Perl DBI интерфейс предоставляет метод quote для преобразования специальных символов в соответствующие последовательности экранирования. См. Раздел 31.9, «MySQL Perl API». Другие языковые интерфейсы могут предоставить аналогичную возможность.

  • В качестве альтернативы явным экранированием специальных символов, многие API MySQL предоставляют возможность использования заменителей, позволяющую вставлять специальные маркеры в строку оператора, а затем привязывать к ним значения данных при выполнении оператора. В этом случае API позаботится об экранировании специальных символов в значениях за вас.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/string-literals.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API