Ho difficoltà a capire perché una condizione LIKE
su un'emoji di 4 B (http://emojipedia.org/eyes/) restituisce tutte le righe nella tabella.SQL Server 2014 LIKE con carattere di larghezza 4 B restituisce l'intera tabella
-- The DB collation is Finnish_Swedish_CI_AS
CREATE TABLE #Test
(
Number int identity,
Value nvarchar(20) NOT NULL
);
GO
INSERT INTO #Test VALUES ('');
INSERT INTO #Test VALUES ('a');
INSERT INTO #Test VALUES ('b');
INSERT INTO #Test VALUES ('c');
INSERT INTO #Test VALUES (''); -- should be http://emojipedia.org/eyes/
GO
select * from #Test where Value like '%%'
select * from #Test where Value like N'%%'
GO
DROP TABLE #Test;
GO
Il risultato della prima selezione è la singola riga di emoji. Tuttavia, il risultato della seconda selezione, in cui la stringa è contrassegnata come UNICODE con il prefisso N, sono tutte le righe.
Perché la seconda selezione corrisponde a tutte le righe nella tabella?
Scenario attuale Ho un'applicazione Web in cui gli utenti possono cercare una directory e, se cercano un'emoji, viene restituita l'intera tabella anziché le righe corrispondenti.
ASP.NET MVC 5 web application <-> Web Api 2 <-> EF -> SQL Server
Aggiornamento La mia prova SQL
è corretto, come @deroby rilevare le INSERT
dichiarazioni devono essere contrassegnati con N '...' per essere inserita correttamente come Unicode.
Soluzione Come @deroby ha dichiarato che sembra essere un problema di collazione, cambiando in Finnish_Swedish_100_CI_AS
sembra che le cose funzionino come previsto.
select * from #Test where Value like N'%%' COLLATE Finnish_Swedish_100_CI_AS