忽略特殊unicode字符的字符串比较

问题描述 投票:0回答:1

我有一张各种语言的城市名称表。这些名称通常包含éü等字符。我正在构建搜索功能,以便用户可以搜索名称,但我希望忽略所有特殊字符,并将它们视为英文26个字母的字母而是字母。

例如,名称munchen的查询应与值München匹配。查询将比较的两侧转换为不区分大小写的26个字母的字母表,然后执行比较。

有没有直接的方法来实现这一目标?

tsql sql-server-2014 string-comparison character-set
1个回答
2
投票

这些角色在任何方面都不是特别的。匹配和排序受列的排序规则影响 - 这指定了排序顺序以及哪些字符匹配。

排序规则可以区分大小写或不区分大小写,它指定Mary是否被视为等于mary。它也可以是重音敏感或非重音,它指定Munchen是否等于München

要使MunchenMünchen匹配,所需的只是对该列使用Accent Insensitive排序规则,例如:

create table Cities (
    id int identity primary key,
    Name nvarchar(200) COLLATE Latin1_General_CI_AI ,
    INDEX IX_Cities_NAME (Name)
)

insert into Cities (Name)
values ('London'), ('München'), ('Munchen')

select * 
from Cities 
where Name = N'mUnchen'

结果是:

Name
--------
München
Munchen

我没有把Name作为主键,因为我无法插入MünchenMunchen,我会得到主键违规

© www.soinside.com 2019 - 2024. All rights reserved.