Domanda

Sono in SQL Server 2008 R2 dev, regole di confronto predefinite server è Cyrillic_General_CI_AS

L'esecuzione in SSMS
    SELEZIONE 'éÉâÂàÀëËçæà' COLLATE Latin1_General_CS_AS
o

SELECT 'éÉâÂàÀëËçæà' COLLATE Latin1_General_CI_AI   

uscite

  • eEaAaAeEc? Una su (in ocntext di utilizzo dbName /) della base di dati con confronto predefinito Cyrillic_General_CI_AS
  • éÉâÂàÀëËçæà sulla base di dati con confronto predefinito Latin1_General_CI_AS

Perché?

È stato utile?

Soluzione

Quei letterali carattere nelle query vengono prima convertiti in stringhe VARCHAR sotto qualunque delle regole di confronto del database è impostato per, e poi il tuo Cast collazione ha effetto.

Se si desidera passare tali letterali carattere e garantire tutti i personaggi sono fedelmente rappresentati, è meglio passare loro come letterali nvarchar:

create database CollTest collate Cyrillic_General_CI_AS
go
use CollTest
go
SELECT 'éÉâÂàÀëËçæà' COLLATE Latin1_General_CS_AS   
SELECT 'éÉâÂàÀëËçæà' COLLATE Latin1_General_CI_AI
go
SELECT N'éÉâÂàÀëËçæà' COLLATE Latin1_General_CS_AS   
SELECT N'éÉâÂàÀëËçæà' COLLATE Latin1_General_CI_AI
go

Output:

-----------
eEaAaAeEc?a

(1 row(s) affected)


-----------
eEaAaAeEc?a

(1 row(s) affected)


-----------
éÉâÂàÀëËçæà

(1 row(s) affected)


-----------
éÉâÂàÀëËçæà

(1 row(s) affected)

Altri suggerimenti

Cyrillic_General_CI_AS questa tabella personaggio non contiene il chacter æ. Questo spiegherebbe il motivo per cui si vede un ? al suo posto se siete veramente utilizzando le impostazioni predefinite invece di quello che avete tra le istruzioni SELECT.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top