【问题标题】:Questions about accent insensitivity in SQL Server (Latin1_General_CI_AS)关于 SQL Server 中重音不敏感的问题 (Latin1_General_CI_AS)
【发布时间】:2013-01-09 15:55:11
【问题描述】:

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

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

问题:

  1. 拥有不区分口音的数据库有哪些负面影响(如果有)?

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

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

【问题讨论】:

    标签: sql-server collation accent-insensitive


    【解决方案1】:

    说真的,更改数据库排序规则是一件非常痛苦的事情。从 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”不是同一个词。一个元音差异就足够了——即使它们听起来很相似。

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

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

    【讨论】:

    • 谢谢。我们遇到的问题是我们正在处理一个包含大量遗留代码的庞大系统。该解决方案确实需要在系统范围内进行,因此数据库排序规则的全面更改将是理想的选择。不过,我很感激您的警告,这就是为什么我们想在尝试之前确保我们做出正确的决定。
    • @Poz,添加了指向 CodeProject “简单方法”的链接。
    猜你喜欢
    • 2013-01-21
    • 1970-01-01
    • 2021-03-09
    • 2017-10-25
    • 1970-01-01
    • 2016-11-20
    • 2017-08-21
    • 2014-02-01
    • 2010-11-04
    相关资源
    最近更新 更多