|
Spec-Zone .ru
спецификации, руководства, описания, API
|
У 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 просят определение сопоставления результата:
Если явное COLLATE происходит, использовать XX.
Если явный COLLATE и XCOLLATE происходите, повысьте ошибку. Y
Иначе, если все сопоставления X,
использовать X.
Иначе, у результата нет никакого сопоставления.
Например, с CASE ... WHEN a THEN b WHEN b THEN c COLLATE , получающееся сопоставление X ENDX. То же самое касается 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 |+----------------+-----------------+-------------------+