Na grande maioria das consultas, é obvio qual collation que o
MySQL usa para resolver uma operação de comparação. Por
exemplo, nos seguintes casos deve estar claro que a
collationserá ``a collation de coluna da coluna
x
'':
SELECT x FROM T ORDER BY x; SELECT x FROM T WHERE x = x; SELECT DISTINCT x FROM T;
No entanto, quando múltiplos operandos estão envolvidos, pode haver ambiguidade. Por exemplo:
SELECT x FROM T WHERE x = 'Y';
Esta consulta deve usar a collation de coluna
x
, ou da string literal
'Y'
?
O padrão SQL resolve tal questão usando o que se costuma
chamar real ``coercibilidade''. A essência é: Como
x
e 'Y'
tem collation,
qual collation toma precedência? É complexo, mas estas regras
cuidariam da maioria das situações:
Uma cláusula COLLATE
explicita tem
precedência 4
Uma concatenação de duas strings com diferentes collations tem precedência 3.
Uma collation de coluna tem precedência 2.
Uma collation de literal tem precedência 1.
Estas regras resolvem ambiguidades da seguinte forma:
Use a collation com a maior precedência.
Se ambos os lados tiverem a mesma precedência, então terá um erro se a collation não são as mesmas.
Exemplos:
column1 = 'A' |
Usa a collation de column1
|
column1 = 'A' COLLATE x |
Usa a collation de 'A'
|
column1 COLLATE x = 'A' COLLATE y |
Error |
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.