2010-11-18 14 views
2

Ich bin auf SQL Server 2008 R2 dev, Sortierung Server Standard ist Cyrillic_General_CI_ASWarum überschreibt explizites COLLATE die Datenbanksortierung nicht?

in SSMS Ausführen
SELECT COLLATE Latin1_General_CS_AS
oder

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

Ausgänge

  • eEaAaAeEc? ein on (in ocntext von/use dbName) der Datenbank mit der Standardsortierung Cyrillic_General_CI_AS
  • éÉâÂàÀëËçæà auf Datenbank mit Standardsortierung Latin1_General_CI_AS

Warum?

Antwort

6

Diese Zeichenliterale in Ihren Abfragen werden zuerst in Varchar-Zeichenfolgen konvertiert, unabhängig davon, für welche Kollatierung die Datenbank festgelegt ist, und dann wird Ihre collation cast wirksam.

Wenn Sie solche Zeichenliterale übergeben wollen und gewährleisten alle Zeichen treu vertreten sind, ist es besser, sie als nvarchar Literale weitergeben müssen:

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 

Ausgang:

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

(1 row(s) affected) 


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

(1 row(s) affected) 


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

(1 row(s) affected) 


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

(1 row(s) affected) 
1

Gemäß this character table enthält Cyrillic_General_CI_AS nicht den æ Chacter. Dies würde erklären, warum Sie einen ? in seinem Platz sehen, wenn Sie wirklich die Standardeinstellungen anstelle von dem verwenden, was Sie in Ihren Select-Anweisungen haben.

Verwandte Themen