2010-11-18 3 views
2

私は、SQL Server 2008 R2のDEVの午前、サーバーの既定の照合順序はCyrillic_General_CI_AS明示的なCOLLATEがデータベース照合をオーバーライドしないのはなぜですか?

SSMSで
SELECT 'éÉâÂàÀëËçæà' COLLATE Latin1_General_CS_AS
または

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

出力

  • eEaAaAeEcを実行

    のですか?デフォルトの照合を使用してデータベースのon(/ odbntext/use dbName)を作成するCyrillic_General_CI_AS

  • デフォルトの照合Latin1_General_CI_AS

なぜを使用して、データベース上の

  • éÉâÂàÀëËçæà?

  • 答えて

    6

    クエリのこれらの文字リテラルは、データベースが設定されている照合順序で最初にvarchar文字列に変換され、次にcollation castが有効になります。

    あなたが忠実に表現され、このような文字リテラルを渡すと、すべての文字を確認したい場合は、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 
    

    出力:

    ----------- 
    eEaAaAeEc?a 
    
    (1 row(s) affected) 
    
    
    ----------- 
    eEaAaAeEc?a 
    
    (1 row(s) affected) 
    
    
    ----------- 
    éÉâÂàÀëËçæà 
    
    (1 row(s) affected) 
    
    
    ----------- 
    éÉâÂàÀëËçæà 
    
    (1 row(s) affected) 
    
    1

    this character tableによると、Cyrillic_General_CI_ASにはæの文字が含まれていません。これは、あなたがselect文にあるものの代わりに本当にデフォルトを使用している場合にはなぜ?がその場所にあるのかを説明します。

    関連する問題