有关SQL Server中重音不敏感的问题(Latin1_General_CI_AS)

Bre*_*tin 5 sql-server collation accent-insensitive

我们所有的数据库都是使用默认的collat​​ion(Latin1_General_CI_AS)安装的.

我们计划更改排序规则,以允许客户端使用重音不敏感搜索数据库.

问题:

  1. 具有重音不敏感数据库的负面信息(如果有的话)是什么?

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

  3. 为什么SQL Server排序规则的默认值非常敏感; 为什么有人会默认需要重音敏感?

Ben*_*Ben 5

说真的,改变数据库整理是一种巨大的痛苦.从codeproject看这个HOWTO,然后在你做之前先仔细思考吧!这是方便的方式!

首先,您可以简单地通过指定作为搜索的一部分来搜索具有重音不敏感性的数据库,您不必更改排序规则.

 select * from TableName
 where name collate Latin1_General_CI_AI like @parameter
Run Code Online (Sandbox Code Playgroud)

简单如.但是,这会伤害索引.

另一种方法是提供一个可以单独索引的计算字段.

    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)
Run Code Online (Sandbox Code Playgroud)

上面的示例将其放在表中,但您也可以创建索引视图.

    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)
Run Code Online (Sandbox Code Playgroud)

然后,对于不区分重音的搜索,请使用该视图TableName_AI.

回答您的具体问题:

  1. 在重音不敏感的数据库中,重音敏感搜索会更慢.

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

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

    可以这样想:"硬"和"群"不是同一个词.那一个元音差异就足够了 - 即使它们听起来很相似.

    重音差异(a与á)介于案例差异(A与a)和字母差异(a​​与e之间)之间.你必须在某处画线.

    虽然我很难想到例子,但是重音会影响单词的声音并使其具有不同的含义.我想对于那些在使用重音的语言中在他们的数据库中有单词的人来说更有意义.