Question

Supposons qu’il existe une table nommée " myTable " avec trois colonnes:

{**ID**(PK, int, not null), 
 **X**(PK, int, not null), 
 **Name**(nvarchar(256), not null)}.

Soit {4, 1, & # 1072; & # 1082; & # 1082; & # 1072; & # 1091; & # 1085; & # 1090;} un record sur la table.

select * from myTable as t 
    where t.ID=4  
    AND t.X = 1 
    AND (     t.Name = N'аккаунт'  )

select * from myTable as t 
    where t.ID=4  
    AND t.X = 1 
    AND (  t.Name LIKE N'%аккаунт%'  )

La première requête renvoie l’enregistrement, mais pas la seconde. Pourquoi?

Systèmes dans lesquels ce problème est rencontré:

* Windows XP - Professionnel - Version 2002 - SP3
Classement du serveur: Latin1_General_CI_AS
Version: 9.00.3073.00
Niveau: SP2
Edition: Developer Edition

Classement par serveur: SQL_Latin1_General_CP1_CI_AS
Version: 9.00.3054.00
Niveau: SP2
Edition: Enterprise Edition

Résultats:

SELECT SERVERPROPERTY('SQLCharSetName')
iso_1

Using OSQL.exe
0x30043A043A04300443043D04420400000000000000000000000000000000
0x3F3F3F3F3F3F3F0000000000000000000000000000000000000000000000
0x253F3F3F3F3F3F3F25000000000000000000000000000000000000000000

SELECT CAST(name AS BINARY),
       CAST(N'аккаунт' AS BINARY),
       CAST(N'%аккаунт%' AS BINARY)
FROM   myTable t
WHERE  t.ID = 4  
       AND t.X = 1

CAST(name AS BINARY) 
0x30043A043A04300443043D04420400000000000000000000000000000000  
CAST(N'аккаунт' AS BINARY)
0x3F3F3F3F3F3F3F0000000000000000000000000000000000000000000000  
CAST(N'%аккаунт%' AS BINARY)
0x253F3F3F3F3F3F3F25000000000000000000000000000000000000000000
Était-ce utile?

La solution 3

D'accord, après de nombreuses recherches, j'ai découvert qu'il s'agissait d'un problème rencontré sur les versions suivantes de SQL Server 2005:

Windows XP - Professionnel - Version 2002 - SP3
Version: 9.00.3073.00
Niveau: SP2
Edition: Developer Edition

Version: 9.00.3054.00
Niveau: SP2
Edition: Édition Entreprise

.. peut également être une autre version.

CORRECTIF: effectuez une mise à niveau vers SP3.

Autres conseils

Pourriez-vous s'il vous plaît publier le résultat de la requête suivante:

SELECT CAST(name AS BINARY),
       CAST(N'аккаунт' AS BINARY),
       CAST(N'%аккаунт%' AS BINARY)
FROM   myTable t
WHERE  t.ID = 4  
       AND t.X = 1

Cela aidera à réduire le problème.

UPDATE:

Comme je peux le constater par les résultats de votre requête, vous rencontrez un problème d'encodage.

Les littéraux cyrilliques de vos constantes de chaîne sont en cours de conversion en points d'interrogation ( 0x3F ).

Malheureusement, je ne peux pas reproduire ce problème avec Management Studio sur mon serveur de test.

Je pense qu'il y a un problème avec les paramètres OS , car les caractères cyrilliques n'atteignent probablement même pas SQL Server .

Pourriez-vous s'il vous plaît répondre à trois autres questions:

  1. Quel système d'exploitation utilisez-vous (version, langue, MUI le cas échéant)

    • Qu'est-ce que cette requête renvoie:

      SELECT SERVERPROPERTY ('SQLCharSetName')

    • Connectez-vous à votre serveur à l'aide de osql.exe et émettez cette requête:

      SELECT CAST (nom AS BINARY),        CAST (N ° & # 1072; & # 1082; & # 1082; & # 1072; & # 1091; & # 1085; & # 1090; 'AS BINARY],        CAST (N '% & # 1072; & # 1082; & # 1082; & # 1072; & # 1091; & # 1085; & # 1090;%' BINAIRE) De ma table t O t.ID = 4
             ET t.X = 1 GO

    Que renvoie-t-il en cours d'exécution dans osql.exe ?

Les deux requêtes donnent le même résultat pour moi.

select * from myTable as t
where t.ID=4
AND t.X = 1
AND (t.Name = N'аккаунт')

Retourne:

ID          X           Name
----------- ----------- ------------
4           1           аккаунт

Et

select * from myTable as t
where t.ID=4
AND t.X = 1
AND (t.Name LIKE N'%аккаунт%')

Retourne:

Microsoft SQL Server 2005 - 9.00.3077.00 (Intel X86) 
    Dec 17 2008 15:19:45 
    Copyright (c) 1988-2005 Microsoft Corporation
    Express Edition on Windows NT 5.1 (Build 2600: Service Pack 3)

(1 ligne (s) affectée (s))

Ma version de SQL Server est la suivante:

<*>

Mon classement est défini sur: SQL_Latin1_General_CP1_CI_AS

Mes résultats pour Quassnoi: 0x30043A043A04300443043D04420400000000000000000000000000000000 0x30043A043A04300443043D04420400000000000000000000000000000000 0x250030043A043A04300443043D044204250000000000000000000000

(1 ligne (s) affectée (s))

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top