如何在 SQL 服务器中对 1250 代码页执行不区分重音的比较

How do I perform an accent insensitive compare in SQL Server for 1250 codepage

在 Whosebug 上已经有一些关于重音不敏感搜索的问题和解决方案,但是 none 它们适用于代码页 1250(中欧和东欧语言)。

How do I perform an accent insensitive compare (e with è, é, ê and ë) in SQL Server?

LINQ Where Ignore Accentuation and Case

Ignoring accents in SQL Server using LINQ to SQL

修改搜索以使其在 SQL 服务器

中不区分重音

Questions about accent insensitivity in SQL Server (Latin1_General_CI_AS)

问题是不区分重音的排序规则被绑定到某些特定的代码页,而我在 MSDN documentation.

中缺少 1250 代码页的不区分重音的排序规则

我需要将列的排序规则修改为make Entity Framework working in accent insensitive way

例如,如果我将排序规则更改为 SQL_LATIN1_GENERAL_CP1_CI_AI,c with accute 是 select as c without accute (U+0107) 因为错误的代码页。

如何解决这个问题?

SELECT *
FROM   sys.fn_helpcollations()
WHERE  COLLATIONPROPERTY(name, 'CodePage') = 1250
       AND description LIKE '%accent-insensitive%';

Returns 264 个结果可供选择。

选第一个

SELECT N'è' COLLATE Albanian_CI_AI
UNION
SELECT N'é'
UNION
SELECT N'ê'
UNION
SELECT N'ë' 

returns 单行(显示所有比较相等)

好的,link MSDN 文档似乎适用于 SQL server 2008 我使用 SQL Server 2014,但我找不到 2014 的任何整理文档。

但解决方案是为我的代码页列出来自服务器的排序规则:

SELECT name, COLLATIONPROPERTY(name, 'CodePage') AS CodePage
FROM fn_helpcollations()
where COLLATIONPROPERTY(name, 'CodePage') = 1250
ORDER BY name;

而且我可以看到有一个未记录的排序规则 Czech_100_CI_AI 对我有用。 Heureka!