如何在SQL Server for 1250代码页中执行重音不敏感比较

时间:2016-11-07 08:04:18

标签: sql-server codepages accent-insensitive

对于stackoverflow上的重音不敏感搜索已经存在严重的问题和解决方案,但它们都不适用于代码页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 Server中具有Accent Insensitive

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,则选择带有accute的c作为c而没有精确(U + 0107),因为错误的代码页。

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

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

返回264个可供选择的结果。

挑选第一个

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

根据需要返回单行(显示所有比较相等)

答案 1 :(得分:0)

好的,似乎链接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!