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

10.1.7.5. Сопоставление Выражений

В значительном большинстве операторов это очевидно что использование MySQL сопоставления разрешить работу сравнения. Например, в следующих случаях, это должно быть четким, что сопоставление является сопоставлением столбца charset_name:

SELECT x FROM T ORDER BY x;SELECT x FROM T WHERE x = x;SELECT DISTINCT x FROM T;

Однако, с многократными операндами, может быть неоднозначность. Например:

SELECT x FROM T WHERE x = 'Y';

Если использование сравнения сопоставление столбца x, или строкового литерала 'Y'? Оба x и 'Y' имейте сопоставления, так, какое сопоставление имеет приоритет?

Стандартный SQL разрешает такое использование вопросов, что имело обыкновение вызываться правилами "coercibility". MySQL присваивает значения coercibility следующим образом:

MySQL использует значения coercibility со следующими правилами разрешить неоднозначности:

Хотя автоматическое преобразование не находится в стандарте SQL, документ стандарта SQL действительно говорит, что каждый набор символов является (с точки зрения поддерживаемых символов) "подмножеством" Unicode. Поскольку это - известный принцип, который, "что применяется к надмножеству, может примениться к подмножеству," мы полагаем, что сопоставление для Unicode может просить сравнения со строками не-Unicode.

Примеры:

Сравнение Используемое сопоставление
column1 = 'A' Используйте сопоставление column1
column1 = 'A' COLLATE x Используйте сопоставление 'A' COLLATE x
column1 COLLATE x = 'A' COLLATE y Ошибка

COERCIBILITY() функция может использоваться, чтобы определить coercibility строкового выражения:

mysql> SELECT COERCIBILITY('A' COLLATE
        latin1_swedish_ci);        -> 0mysql> SELECT
        COERCIBILITY(VERSION());        -> 3mysql> SELECT
        COERCIBILITY('A');        -> 4

См. Раздел 12.14, "информационные Функции".

Для неявного преобразования числового или временного значения к строке, той, которая происходит для параметра 1 в выражении CONCAT(1, 'abc'), результатом является символьная (недвоичная) строка, у которой есть набор символов и сопоставление, определенное character_set_connection и collation_connection системные переменные. См. Раздел 12.2, "Преобразование типов в Вычислении выражения".