在stackoverflow上已经有很多关于重音不敏感搜索的问题和解决方案,但是它们都不适用于代码页1250(中欧和东欧语言)。
我如何执行一个口音不敏感的比较(e与è,
LINQ Where忽略重音和大小写
在SQL Server中使用LINQ to SQL忽略重音
修改SQL Server中的重音不敏感搜索
关于SQL Server (Latin1_General_CI_AS)重音不敏感的问题
问题是重音不敏感排序被绑定到某些特定的代码页,并且我在MSDN文档中缺少1250代码页的重音不敏感排序。
我需要修改列的排序,使实体框架工作在口音不敏感的方式。
例如,如果我将排序规则更改为SQL_LATIN1_GENERAL_CP1_CI_AI,则由于错误的代码页,c with accute被选择为c without accute (U+0107)。
如何解决这个问题?
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'ë'
返回所需的单行(显示所有比较相等)
OK,似乎链接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 !