我们所有的数据库都是使用默认排序规则安装的(Latin1_General_CI_AS
).
我们计划更改排序规则,以允许客户端不区分重音地搜索数据库。
问题:
不区分重音的数据库有哪些负面影响(如果有的话)?
不区分重音的数据库是否有任何性能开销?
为什么 SQL Server 排序规则的默认重音敏感;为什么有人希望默认区分重音?
说真的,改变数据库排序规则是一件非常痛苦的事情。请参阅 codeproject 中的此 HOWTO,然后在执行之前仔细考虑!这是简单的方法!
- http://www.codeproject.com/Articles/302405/The-Easy-way-of-changing-Collation-of-all-Database http://www.codeproject.com/Articles/302405/The-Easy-way-of-changing-Collation-of-all-Database
首先,您只需指定作为搜索的一部分,就可以允许不区分重音的数据库搜索,而不必更改排序规则。
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
.
回答您的具体问题:
在不区分重音的数据库中,区分重音的搜索速度会较慢。
是的,但不是你会注意到的
-
确实如此。有些东西必须是默认的:如果你不喜欢它,就不要使用默认的!
可以这样想:“Hard”和“Herd”不是同一个词。尽管它们听起来很相似,但一个元音差异就足够了。
重音差异(a 与 á)介于大小写差异(A 与 a)和字母差异(a 与 e)之间。你必须在某个地方划清界限。
口音会影响单词的发音,并使其具有不同的含义,尽管我很难想出例子。我想这对于数据库中使用使用重音的语言的单词的人来说更有意义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)