In SQL Server 2012 ho una tabella con una colonna nvarchar con collation Latin1_General_100_CI_AS_ SC, che suppone supportare caratteri di coppia surrogata unicode o caratteri supplementari.query Unicode SQL Server con SC Collation
Quando faccio funzionare questa domanda:
select KeyValue from terms where KeyValue = N'➰'
(sopra è un Unicode SC)
sopra è un personaggio ciclo riccio con il codice 10160 (x27B0)
Il il risultato sono centinaia di voci di singoli caratteri dall'aspetto diverso, anche se hanno tutti codepoints UTF-16 diversi. È dovuto alla collazione? Perché non c'è una corrispondenza esatta?
EDIT: ora penso che questo sia dovuto alle regole di confronto. Sembra che ci sia un gruppo di caratteri "non definiti" nell'intervallo UTF-16, più di 1733 caratteri e sono trattati allo stesso modo da questo confronto. Sebbene i caratteri con codici superiori a 65535 vengano considerati come univoci e tali query restituiscono corrispondenze esatte.Le due query sotto hanno risultati diversi:
select KeyValue from terms where KeyValue = N'π'
restituisce 3 righe: ¸ e ¸ e ᴨ
select KeyValue from terms where KeyValue LIKE N'π'
restituisce i 2 file: ¸ e π
Perché è questo ?Questo è il più strano di tutti. La seguente interrogazione:
select KeyValue from terms where KeyValue like N'➰%'
rendimenti QUASI TUTTI I record della tabella, che ha molti dei personaggi più regolari termini di set di caratteri latini come "8W" o "mela". Il 90% di quelli che non vengono restituiti iniziano con "æ". Che cosa sta succedendo?
NOTA: Giusto per dare un po 'di contesto, questi sono tutti i titoli degli articoli di Wikipedia, non stringhe casuali.
Le regole di confronto SC-aware del database sono? Influirà sui valori letterali delle stringhe nelle tue query. –
Le regole di confronto predefinite di @RogerWolf Database sono le stesse, se questo è ciò che intendi. –
Come viene definito 'KeyValue'defined? 'nvarchar (x)', presumo? o 'varchar (x)'? –