10.3.8 Введение набора символов
Литерал строкового значения, шестнадцатеричный литерал или литерал битовых значений может иметь необязательное введение набора символов и COLLATE предложение, чтобы назначить его строкой, использующей определённый набор символов и сортировку:
[_charset_name] literal [COLLATE collation_name]
Выражение _ формально называется введением. Оно сообщает парсеру: «строка, которая следует за ним, использует набор символов charset_namecharset_name». Введение не изменяет строку на набор символов введения, как это делает CONVERT(). Оно не изменяет значение строки, хотя может произойти дополнение. Введение — всего лишь сигнал.
Для литералов строковых значений пробелы между введением и строкой разрешены, но необязательны.
Для литералов набора символов введение указывает набор символов для последующей строки, но не изменяет, как парсер обрабатывает экранирование в строке. Экранирование всегда интерпретируется парсером в соответствии с набором символов, заданным character_set_connection. Дополнительные обсуждения и примеры см. в Разделе 10.3.6 «Набор символов и сортировка литералов строковых значений».
Примеры:
SELECT 'abc';
SELECT _latin1'abc';
SELECT _binary'abc';
SELECT _utf8'abc' COLLATE utf8_danish_ci;
SELECT _latin1 X'4D7953514C';
SELECT _utf8 0x4D7953514C COLLATE utf8_danish_ci;
SELECT _latin1 b'1000001';
SELECT _utf8 0b1000001 COLLATE utf8_danish_ci;
Введение набора символов и COLLATE предложение реализованы в соответствии со стандартами SQL.
Литералы строковых значений могут быть обозначены как двоичные строки с помощью введения _binary. Шестнадцатеричные литералы и литералы битовых значений по умолчанию являются двоичными строками, поэтому _binary разрешено, но не обязательно.
MySQL определяет набор символов и сортировку литерала строкового значения, шестнадцатеричного литерала или литерала битовых значений следующим образом:
Если оба
_charset_nameиCOLLATEуказаны, используется набор символовcollation_namecharset_nameи сортировкаcollation_name.collation_nameдолжна быть разрешенной сортировкой дляcharset_name.Если
_charset_nameуказано, ноCOLLATEне указано, используется набор символовcharset_nameи его по умолчанию сортировка. Чтобы увидеть сортировку по умолчанию для каждого набора символов, используйте операторSHOW CHARACTER SETили запросите таблицуINFORMATION_SCHEMACHARACTER_SETS.-
Если
_charset_nameне указано, ноCOLLATEуказано:collation_nameДля литерала строкового значения используется набор символов по умолчанию соединения, заданный переменной системы
character_set_connection, и сортировкаcollation_name.collation_nameдолжна быть разрешенной сортировкой для набора символов по умолчанию соединения.Для шестнадцатеричного литерала или литерала битовых значений единственной разрешенной сортировкой является
binary, потому что эти типы литералов по умолчанию являются двоичными строками.
-
В противном случае (ни
_charset_name, ниCOLLATEне указаны):collation_nameДля литерала строкового значения используется набор символов и сортировка по умолчанию соединения, заданные переменными системы
character_set_connectionиcollation_connection.Для шестнадцатеричного литерала или литерала битовых значений набор символов и сортировка являются
binary.
Примеры:
-
Строки, не являющиеся двоичными, с набором символов
latin1и сортировкойlatin1_german1_ci:SELECT _latin1'Müller' COLLATE latin1_german1_ci; SELECT _latin1 X'0A0D' COLLATE latin1_german1_ci; SELECT _latin1 b'0110' COLLATE latin1_german1_ci;
-
Строки, не являющиеся двоичными, с набором символов
utf8и сортировкой по умолчанию (то естьutf8_general_ci):SELECT _utf8'Müller'; SELECT _utf8 X'0A0D'; SELECT _utf8 b'0110';
-
Двоичные строки с набором символов
binaryи сортировкой по умолчанию (то естьbinary):SELECT _binary'Müller'; SELECT X'0A0D'; SELECT b'0110';
Шестнадцатеричному литералу и литералу битовых значений введение не нужно, поскольку они по умолчанию являются двоичными строками.
-
Строка, не являющаяся двоичной, с набором символов по умолчанию соединения и сортировкой
utf8_general_ci(ошибка, если набор символов соединения неutf8):SELECT 'Müller' COLLATE utf8_general_ci;
Эта конструкция (только
COLLATE) не работает для шестнадцатеричных литералов или битовых литералов, потому что их набор символов являетсяbinaryнезависимо от набора символов соединения, иbinaryне совместим с сортировкойutf8_general_ci. Единственное разрешённоеCOLLATEпредложение в отсутствие введения —COLLATE binary. -
Строка с набором символов и сортировкой по умолчанию соединения:
SELECT 'Müller';
© 2025 Oracle
Licensed under the GPLv2 License.