Spec-Zone.ru › MySQL 5.7

10.3.8 Введение набора символов

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

[_charset_name] literal [COLLATE collation_name]

Выражение _charset_name формально называется введением. Оно сообщает парсеру: «строка, которая следует за ним, использует набор символов charset_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_name указаны, используется набор символов charset_name и сортировка collation_name. collation_name должна быть разрешенной сортировкой для charset_name.

  • Если _charset_name указано, но COLLATE не указано, используется набор символов charset_name и его по умолчанию сортировка. Чтобы увидеть сортировку по умолчанию для каждого набора символов, используйте оператор SHOW CHARACTER SET или запросите таблицу INFORMATION_SCHEMA CHARACTER_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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/charset-introducer.html

Spec-Zone.ru

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