Alguns Casos Especiais Onde a Determinação da Collation e Trabalhosa
Na grande maioria das consultas, é obvio qual collation que o MariaDB 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: