Spec-Zone.ru › MySQL 5.7

12.8.3 Набор символов и сортировка результатов функций

В MySQL существует множество операторов и функций, возвращающих строку. Этот раздел отвечает на вопрос: каков набор символов и сортировка такой строки?

Для простых функций, принимающих строковый ввод и возвращающих строковый результат, набор символов и сортировка результата совпадают с набором символов и сортировкой основного входного значения. Например, UPPER(X) возвращает строку с тем же набором символов и сортировкой, что и X. То же самое относится к INSTR(), LCASE(), LOWER(), LTRIM(), MID(), REPEAT(), REPLACE(), REVERSE(), RIGHT(), RPAD(), RTRIM(), SOUNDEX(), SUBSTRING(), TRIM(), UCASE() и UPPER().

Примечание

Функция REPLACE(), в отличие от всех остальных функций, всегда игнорирует сортировку входной строки и выполняет сравнение, учитывающее регистр.

Если строковый ввод или результат функции являются двоичной строкой, строка имеет набор символов и сортировку binary. Это можно проверить, используя функции CHARSET() и COLLATION(), которые обе возвращают binary для двоичного строкового аргумента:

mysql> SELECT CHARSET(BINARY 'a'), COLLATION(BINARY 'a');
+---------------------+-----------------------+
| CHARSET(BINARY 'a') | COLLATION(BINARY 'a') |
+---------------------+-----------------------+
| binary              | binary                |
+---------------------+-----------------------+

Для операций, комбинирующих несколько строковых входных данных и возвращающих единственный строковый результат, применяются «правила агрегации» стандартного SQL для определения сортировки результата:

  • Если присутствует явное COLLATE Y, используется Y.

  • Если явные COLLATE Y и COLLATE Z присутствуют, возникает ошибка.

  • В противном случае, если все сортировки являются Y, используется Y.

  • В противном случае, результат не имеет сортировки.

Например, при использовании CASE ... WHEN a THEN b WHEN b THEN c COLLATE X END, результирующая сортировка составляет X. То же самое относится к UNION, ||, CONCAT(), ELT(), GREATEST(), IF() и LEAST().

Для операций преобразования в строковый тип набор символов и сортировка результирующих строк определяются системными переменными character_set_connection и collation_connection, которые задают набор символов и сортировку по умолчанию для подключения (см. Раздел 10.4, «Наборы символов и сортировки подключения»). Это относится только к CAST(), CONV(), FORMAT(), HEX() и SPACE().

Начиная с MySQL 5.7.19, исключение из вышеупомянутого принципа встречается для выражений виртуальных сгенерированных столбцов. В таких выражениях набор символов таблицы используется для результатов CONV() или HEX(), независимо от набора символов подключения.

Если есть вопросы относительно набора символов или сортировки результата, возвращаемого строковой функцией, используйте функцию CHARSET() или COLLATION() для выяснения:

mysql> SELECT USER(), CHARSET(USER()), COLLATION(USER());
+----------------+-----------------+-------------------+
| USER()         | CHARSET(USER()) | COLLATION(USER()) |
+----------------+-----------------+-------------------+
| test@localhost | utf8            | utf8_general_ci   |
+----------------+-----------------+-------------------+
mysql> SELECT CHARSET(COMPRESS('abc')), COLLATION(COMPRESS('abc'));
+--------------------------+----------------------------+
| CHARSET(COMPRESS('abc')) | COLLATION(COMPRESS('abc')) |
+--------------------------+----------------------------+
| binary                   | binary                     |
+--------------------------+----------------------------+

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

Spec-Zone.ru

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