Ich bin gerade dabei, ein Haustierprojekt von PostgreSQL (9.2.2) auf SQL Server (2012 Standard) zu verschieben.
Ich habe ein interessantes Phänomen beim Abfragen von Unicode-Wörtern festgestellt. Angesichts der Definition:
CREATE TABLE [word](
[id] [int] IDENTITY(0,1) NOT NULL,
[value] [nvarchar](255) NULL
);
und die Daten:
insert into word (value) values (N'ῥύπῳ');
insert into word (value) values (N'ἀπὸ');
insert into word (value) values (N'ἀπό');
insert into word (value) values (N'ἐπὶ');
insert into word (value) values (N'ἐπί');
insert into word (value) values (N'ὑπὸ');
insert into word (value) values (N'ὑπό');
insert into word (value) values (N'πίῃ');
insert into word (value) values (N'λόγους');
insert into word (value) values (N'λόγχῃ');
insert into word (value) values (N'λόγων');
insert into word (value) values (N'ἀλόης');
Eine Abfrage für ein bestimmtes Wort gibt nahezu Übereinstimmungen zurück. Zum Beispiel:
select * from word where value = N'ἀπὸ'
kehrt zurück:
id value
102137 ῥύπῳ
102141 ἀπὸ
102142 ἀπό
102143 ἐπὶ
102144 ἐπί
102145 ὑπὸ
102146 ὑπό
102147 πίῃ
http://sqlfiddle.com/#!6/1ab66/1
Das gleiche Muster in PostgreSQL gibt jedoch nur die genaue Übereinstimmung zurück. Wie kann ich SQL Server dazu bringen, dasselbe zu tun?
(PostgreSQL-Geigenlink): http://sqlfiddle.com/#!12/c57a6/1
Ich habe das deutliche Gefühl, dass mir etwas fehlt, aber ich kann nicht ganz herausfinden, was es ist.
Die Datenbanksortierung befindet sich SQL_Latin1_General_CP1_CI_AS
(dies ist auch die Sortierung des Servers) in einer lokalen Installation.
quelle