5

我们所有的数据库都是使用默认排序规则 ( Latin1_General_CI_AS) 安装的。

我们计划更改排序规则,以允许客户在不区分口音的情况下搜索数据库。

问题:

  1. 拥有对口音不敏感的数据库有什么负面影响(如果有的话)?

  2. 对口音不敏感的数据库是否有任何性能开销?

  3. 为什么 SQL Server 排序规则的默认值区分重音;为什么有人要默认区分重音?

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)

然后,对于不区分重音的搜索,使用 view TableName_AI

要回答您的具体问题:

  1. 在不区分口音的数据库中,区分口音的搜索会比较慢。

  2. 是的,但不是你会注意到的

  3. 就是这样。某些东西必须是默认值:如果您不喜欢它,请不要使用默认值!

    这样想:“Hard”和“Herd”不是同一个词。一个元音差异就足够了——即使它们听起来很相似。

    重音差异(a vs.á)介于大小写差异(A vs. a)和字母差异(a​​ vs e)之间。你必须在某处画线。

    口音会影响单词的发音并使其具有不同的含义,尽管我很难想出例子。我想对于那些在他们的数据库中使用一种使用口音的语言的人来说,这更有意义。

于 2013-01-25T21:20:07.557 回答