Opérateur BINARY
<<<
Quelques cas spéciaux où la détermination de la collation est difficile Les collation doivent correspondre au bon jeu de caractères
>>>

11.3 Déterminer le jeu de caractères et la collation par défaut
11 Jeux de caractères et Unicode
 Manuel de Référence MySQL 4.1 : Version Française

Jeu de caractères et collation serveur
Jeu de caractères et collation de base de données
Jeu de caractères de tables et collation
Jeu de caractères de colonne et collation
Exemples d'attribution de jeu de caractères et collation
Jeux de caractères et collations de connexion
Jeu de caractères et collation des chaînes littérales
Clause COLLATE dans différentes parties d'une requête SQL
COLLATE clause de précédence
Opérateur BINARY
->Quelques cas spéciaux où la détermination de la collation est difficile
Les collation doivent correspondre au bon jeu de caractères
Un exemple de l'effet de collation

11.3.11 Quelques cas spéciaux où la détermination de la collation est difficile

Dans la grande majorité des requêtes, la collation utilisée par MySQL pour résoudre une comparaison est évidente. Par exemple, dans les cas suivants, il devrait être clair que la collation sera "la collation de colonne de la colonne x '' :

SELECT x FROM T ORDER BY x;
SELECT x FROM T WHERE x = x;
SELECT DISTINCT x FROM T;
Cependant, quand des opérandes multiples sont, en jeu il peut y avoir des ambiguïtés. Par exemple :

SELECT x FROM T WHERE x = 'Y';
Cette requête devrait elle utiliser la collation de la colonne x , ou celle de la chaîne littérale 'Y' ?

Le standard SQL résout de telles questions en utilisant ce qui portait le nom de règles coercitives (`` coercibility ''). L'essence de la question est : puisque x et 'Y' ont tous deux des collations différentes, laquelle a priorité? C'est une question complexe, mais ces règles devraient résoudre la plupart des situations :

  • Une clause explicite COLLATE a pour priorité 4.
  • Une concaténation de deux chaînes avec des collations différentes à pour priorité 3.
  • La collation d'une colonne a priorité 2.
  • La collation d'une chaîne littérale a pour priorité 1.

Ces règles résolvent les ambiguités de la façon suivante :

  • Utiliser la collation qui a la précédence la plus élevée.
  • Si les deux opérandes ont une collation de même priorité, alors il y a erreur si les collations ne sont pas les mêmes.

Exemples :

column1 = 'A' Utilise la collation de la colonne column1
column1 = 'A' COLLATE x Utilise la collation de 'A'
column1 COLLATE x = 'A' COLLATE y Erreur
La fonction COERCIBILITY() peut être utilisée pour déterminer la coercibilité d'une chaîne :

mysql> SELECT COERCIBILITY('A' COLLATE latin1_swedish_ci);
        -> 0
mysql> SELECT COERCIBILITY('A');
        -> 3
Fonctions d'informations .

<< Quelques cas spéciaux où la détermination de la collation est difficile >>
Opérateur BINARY Déterminer le jeu de caractères et la collation par défaut Les collation doivent correspondre au bon jeu de caractères