[英]T-SQL Contains Search and German Umlaut on SQL Server 2008 R2
我在SQL Server 2008 R2上面临一个问题,我必须使用包含搜索而忽略德语Umlaute-Letters(ä,ö,ü)。
对于所有非德语的开发人员:德语变音字母可以表示为常规基础字母(使用ä时)和e。 所以穆勒和穆勒一样,巴克尔和巴克尔一样。
我们想要做的是:当搜索“Müller”时,我们希望找到包含“Mueller”和“Müller”的数据,当输入“Mueller”时,我们希望找到包含“Müller”以及“穆勒”。
使用like或=比较数据时,只需附加COLLATE German_PhoneBook_CI_AI即可。 当使用包含全文索引的搜索时,这并不容易。 您可以将重音敏感度设置为关闭,但是包含搜索将ü-字母视为u,ä-字母像a和ö字母一样o,它不会找到包含oe的条目而不是ö,ue而不是ü和ae而不是ä。
将列上的排序规则设置为“German_Phonebook_CI_AS”或“German_Phonebook_100_CI_AS”似乎也没有帮助。
以前有人遇到过同样的问题吗?
您应该按照以下步骤操作:
请参阅以下示例:
CREATE TABLE MyTable (
ID int IDENTITY CONSTRAINT PK_MyTable PRIMARY KEY,
Txt nvarchar(max) COLLATE German_PhoneBook_100_CI_AI NOT NULL
)
INSERT INTO dbo.MyTable
VALUES (N'Müller'), (N'Mueller'), (N'Muller'), (N'Miller')
GO
CREATE FULLTEXT CATALOG FTSCatalog WITH ACCENT_SENSITIVITY=ON AS DEFAULT
CREATE FULLTEXT INDEX ON MyTable (Txt LANGUAGE German) KEY INDEX PK_MyTable
GO
WHILE EXISTS (
SELECT * FROM sys.dm_fts_index_population
WHERE database_id=DB_ID()
AND status<>7
) WAITFOR DELAY '0:0:1'
GO
SELECT * FROM CONTAINSTABLE(dbo.MyTable,Txt,N'FORMSOF(INFLECTIONAL,Müller)')
SELECT * FROM CONTAINSTABLE(dbo.MyTable,Txt,N'FORMSOF(INFLECTIONAL,Muller)')
SELECT * FROM CONTAINSTABLE(dbo.MyTable,Txt,N'FORMSOF(INFLECTIONAL,Mueller)')
GO
DROP FULLTEXT INDEX ON MyTable
DROP FULLTEXT CATALOG FTSCatalog
GO
DROP TABLE dbo.MyTable
我建议你在这种情况下搜索Müller
和Mueller
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.