Spec-Zone .ru
спецификации, руководства, описания, API

10.1.9.1. Строки результата

У MySQL есть много операторов и функций, которые возвращают строку. Этот раздел отвечает на вопрос: Каков набор символов и сопоставление такой строки?

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

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

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

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

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

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

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

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

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