le résultat o f une comparaison de chaînes dépend du classement d'un jeu de caractères. Par défaut, il s'agit du classement spécifié lors de l'installation de l'instance de serveur, mais les classements peuvent également être spécifiés aux niveaux de la base de données et de la colonne de table. Ils peuvent également être spécifiés dans la requête. Les collations peuvent s'appliquer aux comparaisons et aux chaînes individuelles, et il existe de nombreuses règles concernant la compatibilité des collations.
Les chaînes de votre exemple sont considérées comme égales dans le classement utilisé lors de l'exécution de la requête.
Il n'y a pas de réponse facile à la question de savoir si vous avez des chaînes dans plusieurs langues. Si vous souhaitez que les chaînes qui semblent différentes soient considérées comme inégales, vous pouvez essayer un classement binaire. Toutefois, si vous comparez des chaînes à l'aide d'un classement différent du classement système ou du classement applicable car il a été spécifié pour la base de données ou la colonne de la table, le processeur de requêtes risque de ne pas pouvoir utiliser les index. lentement.
L'interprétation des chaînes fournies par l'utilisateur peut également dépendre des paramètres régionaux du système d'exploitation, et les résultats peuvent changer en fonction de l'utilisation du N qui indique Unicode.
Voici une démonstration de la façon dont les chaînes dans votre exemple pourraient être considérés comme égaux sous certains classements et inégale sous d'autres:
with t(a,b) as (
select
N'6Aࡀ㐠㗨㙡㙡⻑S0S0S0S0S0S0',
N'6Aݨ⻈㗨㙡㙡⻑S0S0S0S0S0S0'
)
select
'Japanese_CI_AI' as Collation,
case when a=b collate Japanese_CI_AI then 'Equal' else 'Not Equal' end as Result,
a, b
from t
union all
select
'Latin1_General_100_CS_AI' as Collation,
case when a=b collate Latin1_General_100_CS_AI then 'Equal' else 'Not Equal' end as Result,
a, b
from t
union all
select
'Arabic_100_CI_AS' as Collation,
case when a=b collate Arabic_100_CI_AS then 'Equal' else 'Not Equal' end as Result,
a, b
from t
union all
select
'SQL_Latin1_General_CP1_CI_AI' as Collation,
case when a=b collate SQL_Latin1_General_CP1_CI_AI then 'Equal' else 'Not Equal' end as Result,
a, b
from t
union all select « Latin1_General_BIN » comme Collation, cas où a = b assembler Latin1_General_BIN puis 'Equal' sinon 'Pas égal' comme résultat, a, b de t
est-ce un jeu de caractères utf8? essayez d'utiliser 'COLLATE' avec votre querry. [Utilisation de COLLATE dans les instructions SQL] (http://dev.mysql.com/doc/refman/5.0/en/charset-collate.html) – bansi
Comment puis-je l'utiliser? – Feri
lorsque vous utilisez unicode vous devez préfixer votre chaîne avec N par exemple: O WH deux = N'6Aࡀ S0S0S0S0S0S0 ' – VahidNaderi