Frage

Angenommen, eine Tabelle „myTable“ mit drei Spalten benannt ist:

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

Es sei {4, 1, аккаунт} auf dem Tisch ein Rekord sein.

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'%аккаунт%'  )

Die erste Abfrage den Datensatz zurückkehren, jedoch der zweite nicht? Warum?

Systeme, in denen diese Themen erfahren werden:

* Windows XP - Professional - Version 2002 - SP3
Server-Sortierungs: Latin1_General_CI_AS
Version: 9.00.3073.00
Level: SP2
Ausgabe: Developer Edition

Sever Sortierungs: SQL_Latin1_General_CP1_CI_AS
Version: 9.00.3054.00
Level: SP2
Ausgabe: Enterprise Edition

Ergebnisse:

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
War es hilfreich?

Lösung 3

In Ordnung, nach einem sehr vieler Forschung, fand ich es ist in der Tat ein Problem auf den folgenden Versionen von SQL Server gefunden 2005:

Windows XP - Professional - Version 2002 - SP3
Version: 9.00.3073.00
Level: SP2
Ausgabe: Developer Edition

Version: 9.00.3054.00
Level: SP2
Ausgabe: Enterprise Edition

.. Es können auch andere Versionen sein.

UPDATE:. Upgrade auf SP3

Andere Tipps

Könnten Sie bitte das Ergebnis der folgenden Abfrage schreiben:

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

Dies wird dazu beitragen, das Problem zu verengen.

UPDATE:

Wie ich aus den Ergebnissen der Abfrage sehen kann, haben Sie ein Problem mit Codierung.

Die kyrillische Literale aus dem String-Konstanten auf die Fragezeichen umgewandelt werden (0x3F).

Leider kann ich dieses Verhalten nicht reproduzieren mit Management Studio auf meinem Test-Server.

Ich denke, es gibt ein Problem mit OS Einstellungen ist, als kyrillische Zeichen höchstwahrscheinlich auch nicht SQL Server erreichen.

Könnten Sie bitte beantworten drei weitere Fragen:

  1. Was OS sind Sie (Version, Sprache, MUI falls vorhanden)

    • Was bedeutet diese Abfrage Rückkehr:

      SELECT SERVER ( 'SQLCharSetName')

    • Eine Verbindung mit dem Server mit osql.exe und gibt diese Abfrage:

      SELECT CAST (Name AS BINARY),        CAST (N'аккаунт‘AS BINARY),        CAST (N '% аккаунт%' AS BINARY) VON myTable t WHERE t.ID = 4
             UND T. x = 1 GO

    Was sie zurückkehrt, wird in osql.exe laufen?

Beide Abfragen geben das gleiche Ergebnis für mich.

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

Returns:

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

Und

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

Returns:

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

(1 Zeile (n) betroffen)

Meine Version von SQL Server ist:

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)

Meine Sortierungs ist eingestellt auf: SQL_Latin1_General_CP1_CI_AS

Meine Ergebnisse für Quassnoi: 0x30043A043A04300443043D04420400000000000000000000000000000000 0x30043A043A04300443043D04420400000000000000000000000000000000 0x250030043A043A04300443043D0442042500000000000000000000000000

(1 Zeile (n) betroffen)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top