我们所有的数据库都是使用默认排序规则 ( Latin1_General_CI_AS
) 安装的。
我们计划更改排序规则,以允许客户在不区分口音的情况下搜索数据库。
问题:
拥有对口音不敏感的数据库有什么负面影响(如果有的话)?
对口音不敏感的数据库是否有任何性能开销?
为什么 SQL Server 排序规则的默认值区分重音;为什么有人要默认区分重音?
我们所有的数据库都是使用默认排序规则 ( Latin1_General_CI_AS
) 安装的。
我们计划更改排序规则,以允许客户在不区分口音的情况下搜索数据库。
问题:
拥有对口音不敏感的数据库有什么负面影响(如果有的话)?
对口音不敏感的数据库是否有任何性能开销?
为什么 SQL Server 排序规则的默认值区分重音;为什么有人要默认区分重音?
说真的,更改数据库排序规则是一件非常痛苦的事情。从 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
。
要回答您的具体问题:
在不区分口音的数据库中,区分口音的搜索会比较慢。
是的,但不是你会注意到的
就是这样。某些东西必须是默认值:如果您不喜欢它,请不要使用默认值!
这样想:“Hard”和“Herd”不是同一个词。一个元音差异就足够了——即使它们听起来很相似。
重音差异(a vs.á)介于大小写差异(A vs. a)和字母差异(a vs e)之间。你必须在某处画线。
口音会影响单词的发音并使其具有不同的含义,尽管我很难想出例子。我想对于那些在他们的数据库中使用一种使用口音的语言的人来说,这更有意义。