sql搜索包含变音符号的字段

Posted

技术标签:

【中文标题】sql搜索包含变音符号的字段【英文标题】:sql search on fields containing diacritics 【发布时间】:2011-03-29 00:25:53 【问题描述】:

我正在使用 Sql server 2008 express edition 进行网站搜索。

我有一个 'Books' 表,其中有一个名为 'Title' 的字段,其中包含包含罗马尼亚(拉丁)字符的标题。

好吧,如果用户在搜索字段中插入一个单词,例如:'casa',并且我在 db 中有一个标题,例如:'test casă test',我想要展示那本书但是:

select * from books where title like '%casa%'

找不到...

您知道在选择时删除变音符号的任何功能吗?

我知道我可以用 sql server 的全文搜索插件来解决这个问题,但我想用一种更简单的方式来解决这个问题。

【问题讨论】:

【参考方案1】:
select * from books where title COLLATE Latin1_General_CI_AI like '%casa%'

当然,你应该选择一个与你匹配的排序规则......只需将最后的 AS 更改为 AI 以使其“不区分重音”

德语变音符号的简单示例

DECLARE @foo TABLE (bar varchar(100) /*implied COLLATE Latin1_General_CI_AS*/)

INSERT @foo VALUES ('xxx fish yyy')
INSERT @foo VALUES ('xxx bar yyy' )
INSERT @foo VALUES ('xxx bär yyy')

select * from @foo where bar COLLATE Latin1_General_CI_AI like '%bar%'
select * from @foo where bar like '%bar%'

【讨论】:

另外,如果您总是希望搜索不区分重音,您可以更改数据库的排序规则。 还有一个问题:你也知道如何在 linq 中执行此操作吗?非常感谢! @Cristian Boariu:对不起,我没有。也许你无论如何都不能......***.com/questions/488249【参考方案2】:

您需要使用不区分重音的整理子句。

【讨论】:

【参考方案3】:

如果您需要在 linq 中执行此操作,我认为您必须先删除搜索字符串中的变音符号,然后再进行 linq 查询......它应该可以工作......

【讨论】:

以上是关于sql搜索包含变音符号的字段的主要内容,如果未能解决你的问题,请参考以下文章

带有德语变音符号的 JSON Jackson + HTTPClient

MongoDB diacriticInSensitive 搜索未按预期显示所有重音(带有变音符号的单词)行,反之亦然

Python2 / Windows7:打开包含德语变音符号的文件名

使用 utf8_general_ci 排序规则和 utf8 字符集服务器的德语变音符号的搜索结果区分大小写

swift 3 - 搜索结果也带有变音符号

Android,变音符号不敏感 SQLite 搜索