Unicode-Zeichen in SELECT Anweisung

08/01/2009 - 16:54 von udse | Report spam
Hallo zusammen,

ich erhalte sehr merkwürdige Ergebnismengen, wenn ich in einer SELECT-
Anfrage UNICODE-Zeichen verwende.
Beispiel:

create table unicode_test (value NVarChar(20));
insert into unicode_test values (N'123456ۼ');
insert into unicode_test values ('XYZ' + nchar(1788) + 'ABC');
insert into unicode_test values ('ABCDEFG');
...

select * from unicode_test where value like N'%ۼ%' // auch bei ...
like N'%' + NCHAR(1788) + '%'
123456ۼ
XYZۼABC
ABCDEFG


select * from unicode_test where value like N'%Zۼ%'
<no rows>

Eigentlich hàtte ich andere Ergebnismengen erwartet :) Und je nach
Konstellation der Daten oder formulierung der Abfrage passieren noch
ganz andere, merkwürdige, mir nicht einleuchtende Dinge.

Was mache ich hier falsch?

Danke für jeden Hinweis,
Uli
 

Lesen sie die antworten

#1 Elmar Boye
08/01/2009 - 18:16 | Warnen spam
Hallo Uli,

"udse" schrieb ...
ich erhalte sehr merkwürdige Ergebnismengen, wenn ich in einer
SELECT- Anfrage UNICODE-Zeichen verwende.
Beispiel:

create table unicode_test (value NVarChar(20));
insert into unicode_test values (N'123456ۼ');
insert into unicode_test values ('XYZ' + nchar(1788) + 'ABC');
insert into unicode_test values ('ABCDEFG');
...



Besser mischt man nicht ANSI (ohne N' Pràfix) und Unicode-Literale,
denn das erfordert eine zusàtzliche Konvertierung.

select * from unicode_test where value like N'%ۼ%' // auch bei ...
like N'%' + NCHAR(1788) + '%'
123456ۼ
XYZۼABC
ABCDEFG

select * from unicode_test where value like N'%Zۼ%'
<no rows>



Letzteres liefert bei mir das gleiche Ergebnis wie die erste,
also auch mit dem eher ungewollten dritten ABC... - hier
unter Vista SP1, SQL Server 2008 mit Latin1_General_CI_AS

Eigentlich hàtte ich andere Ergebnismengen erwartet :)



Das Problem mit den Erwartungen ist, das sie die eingestellte
Sortierfolge auch erfüllen können (wollen) muß.

So schließt sowohl
LIKE N'%ۼ%' COLLATE Latin1_General_BIN
als auch
LIKE N'%ۼ%' COLLATE Latin1_General_100_CI_AS
die letzte Zeile aus.
Letztere ist erst ab SQL Server 2008 verfügbar:
http://msdn.microsoft.com/de-de/lib...88046.aspx

Und je nachonstellation der Daten oder formulierung der Abfrage
passieren nochanz andere, merkwürdige, mir nicht einleuchtende Dinge.



Nun kann ich nur wenig mit dem "Arabischen Buchstaben Ghain
mit Punkt unten" - so sagt mir zumindest charmap.exe
bzw. http://unicode.org/cldr/utility/character.jsp?aFC anfangen.

Grundsàtzlich hàngt die "Trefferquote" von LIKE vom gewàhlten
Zeichensatz ab und bei exotischeren Zeichen auch ob er in den
Codetabellen von Windows existiert:
http://msdn.microsoft.com/de-de/mag...63490.aspx

Und (vornehmlich bei àlteren SQL Server Versionen) gelegentlich
nimmt sich auch LIKE mal eine Auszeit:
http://www.google.de/search?q=LIKE+...rosoft.com

Um weiteres auszugraben müßte man Deine Plattform-Daten
genauer kennen.

Gruß Elmar

Ähnliche fragen