2011-01-15 41 views
3

Sehr geehrte Freunde, Ich habe mit einem Problem konfrontiert nie jemals gedacht. Mein Problem scheint zu einfach zu sein, aber ich kann keine Lösung finden. Ich habe eine SQL Server-Datenbankspalte vom Typ NVarchar und ist mit persischen Standardzeichen gefüllt. Wenn ich versuche, eine sehr einfache Abfrage auszuführen, die den LIKE-Operator enthält, wird das Resultset leer, obwohl ich weiß, dass der Abfragebegriff in der Tabelle vorhanden ist. Hier ist die sehr smiple Beispielabfrage, die nicht corectly wirkt: SELECT * FROM T_Contacts WHERE C_ContactName LIKE ‚% ف%‘SQL LIKE Operator funktioniert nicht mit asiatischen Sprachen (SQL Server 2008)

ف ist eine persisch Charakter und die Contact coulmn enthält mehrere Einträge, die dieses Zeichen enthalten.

Bitte sagen Sie mir, wie ich den Ausdruck umschreiben soll oder welche Änderung ich anwenden soll. Beachten Sie, dass die Sortierung meiner Datenbank SQL_Latin1_General_CP1_CI_AS ist.

Vielen Dank

Antwort

4

Auch wenn diese Werte als NVARCHAR gespeichert werden (was ich hoffe, sie sind !!), dann sollten Sie immer verwenden, um den N'..' Präfix für alle Stringliterale sicherzustellen, dass Sie bekommen keine unerwünschten Konvertierungen zurück zu nicht -Unicode VARCHAR.

So sollten Sie Such sein:

SELECT * FROM T_Contacts 
WHERE C_ContactName COLLATE Persian_100_CI_AS LIKE N'%ف%' 
3

Sollte es nicht sein:

SELECT * FROM T_Contacts WHERE C_ContactName LIKE N'%ف%' 

dh mit dem N vor dem Vergleich String, so dass er es wie ein nvarchar behandelt?

+0

Sein ist wahr, Herr :) – Farshid