Spec-Zone.ru › MySQL 9.2

14.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, которые определяют набор символов и сортировку по умолчанию соединения (см. Раздел 12.4, «Наборы символов и сортировки соединений»). Это относится только к BIN_TO_UUID(), CAST(), CONV(), FORMAT(), HEX() и SPACE().

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

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

mysql> SELECT USER(), CHARSET(USER()), COLLATION(USER());
+----------------+-----------------+--------------------+
| USER()         | CHARSET(USER()) | COLLATION(USER())  |
+----------------+-----------------+--------------------+
| test@localhost | utf8mb3         | utf8mb3_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-8.4-en/string-functions-charset.html

Spec-Zone.ru

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