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
происходит, использовать X
X
.
Если явный COLLATE
и X
COLLATE
происходите, повысьте ошибку. 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 |+----------------+-----------------+-------------------+