5

すべてのデータベースは、デフォルトの照合(Latin1_General_CI_AS)を使用してインストールされました。

クライアントがアクセントに影響されないデータベースを検索できるように、照合を変更する予定です。

質問:

  1. アクセントに敏感でないデータベースを持つことの欠点(もしあれば)は何ですか?

  2. アクセントに影響されないデータベースのパフォーマンスのオーバーヘッドはありますか?

  3. SQLServer照合のデフォルトがアクセントに敏感なのはなぜですか。なぜ誰もがデフォルトでアクセントセンシティブを望んでいるのでしょうか?

4

1 に答える 1

5

真剣に、データベースの照合を変更することは非常に苦痛です。codeprojectからこのHOWTOを見て、それを行う前によく考えてください!これは簡単な方法です!

まず、検索の一部として照合を変更する必要がないことを指定するだけで、アクセントに依存しないデータベースの検索を許可できます。

 select * from TableName
 where name collate Latin1_General_CI_AI like @parameter

単純なように。ただし、これはインデックスを傷つけます。

別の方法は、個別に索引付けできる計算フィールドを提供することです。

    create table TableName(
    ix int identity primary key,
    name nvarchar(20) collate latin1_general_ci_as
    )
    go
    alter table TableName
    add  name_AI as name collate latin1_general_CI_AI
    go
    create index IX_TableName_name_AI
    on dbo.TableName(name_AI)

上記の例ではそれをテーブルに配置していますが、インデックス付きビューを作成することもできます。

    create view dbo.TableName_AI
    with schemabinding
    as 
    select ix,
    name collate Latin1_general_CI_AI as name
    from dbo.TableName
    go
    -- Need a unique clustered index first
    create unique clustered index IX_TableName_AI_Clustered on dbo.TableName_AI(ix)
    -- then the index for searching
    create index IX_TableName_AI_name on dbo.TableName_AI(name)

次に、アクセントに依存しない検索の場合は、ビューを使用しますTableName_AI

特定の質問に答えるには:

  1. アクセントに依存しないデータベースでは、アクセントに依存する検索は遅くなります。

  2. はい、でもそうではありません。

  3. ただです。何かがデフォルトである必要があります:それが気に入らない場合は、デフォルトを使用しないでください!

    このように考えてください。「Hard」と「Herd」は同じ言葉ではありません。同じように聞こえますが、母音の違いは1つで十分です。

    アクセントの違い(aとá)は、大文字と小文字の違い(Aとa)と文字の違い(aとe)の間のどこかにあります。どこかに線を引く必要があります。

    アクセントは単語の音に影響を与え、例を考えるのに苦労しますが、それを別の意味にすることができます。データベースにアクセントを利用する言語の単語がある人にとっては、もっと理にかなっていると思います。

于 2013-01-25T21:20:07.557 に答える