Je suis en train de déplacer un projet pour animaux de compagnie de PostgreSQL (9.2.2) vers SQL Server (2012 Standard).
J'ai remarqué un phénomène intéressant lors de l'interrogation de mots unicode. Compte tenu de la définition:
CREATE TABLE [word](
[id] [int] IDENTITY(0,1) NOT NULL,
[value] [nvarchar](255) NULL
);
et les données:
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'ἀλόης');
une requête pour un mot particulier renverra des correspondances proches. Par exemple:
select * from word where value = N'ἀπὸ'
Retour:
id value
102137 ῥύπῳ
102141 ἀπὸ
102142 ἀπό
102143 ἐπὶ
102144 ἐπί
102145 ὑπὸ
102146 ὑπό
102147 πίῃ
http://sqlfiddle.com/#!6/1ab66/1
Cependant, le même modèle dans PostgreSQL ne renvoie que la correspondance exacte. Comment puis-je demander à SQL Server de faire de même?
(Lien violon PostgreSQL): http://sqlfiddle.com/#!12/c57a6/1
J'ai le sentiment distinct que je manque quelque chose, mais je ne suis pas tout à fait capable de comprendre ce que c'est.
Le classement de la base de données est SQL_Latin1_General_CP1_CI_AS
(qui est également le classement du serveur) sur une installation locale.
la source