2009-11-24 30 views
2

我有一個網站,其產品名稱中包含法語和英語單詞。當我存儲產品名稱時,我將其存儲爲我的SQL Server中的ProductName字段中編碼的html。例如,Château這個詞在我的數據庫中存儲爲Ch â teau如何在存儲不同語言時在sql server中搜索文本

如果有人想搜索產品名稱,我使用htmlencode搜索條件。這將成功返回搜索字詞Château的匹配,但如果某人輸入了Chateau(大多數英文用戶會這樣做),我不會從我的LIKE語句中返回任何結果。這是正確的,因爲Chateau不符合Ch â teau。

我希望能夠做的就是讓別人通過簡單的輸入Chateau來搜索Château這個詞。

任何想法,我可以去這個?我使用asp.net C#3.5 SP1和Sql Server 05.

+0

如果找不到相似的拼音單詞匹配,如果找不到結果或附加結果,怎麼樣? – Saar 2009-11-24 11:03:45

+0

這將是非常酷的,但我看過的任何示例都非常複雜的解決方案。我會說我可能只需要保存產品名稱而不用htmlencoding,然後按照下面的示例使用排序規則鑄造。 – 2009-11-24 11:13:23

回答

1
select 
    product_name 
from 
    products 
where 
    product_name Collate SQL_Latin1_General_CP1_CI_AI like 'Chateau' 
+0

感謝您的回答,但這些值以HTML編碼形式存儲。我已經更新了我的答案,使其更清晰 - 網站編輯器將我的價值轉換爲html;)您會推薦我存儲法語字詞而不將其編碼到我的數據庫中嗎?謝謝。 – 2009-11-24 11:08:07

+0

是的,將它直接存儲在數據庫中。切勿將HTML編碼的實體存儲在數據庫中。 – 2009-11-24 11:21:13

0

一個簡單的答案是使用排序規則鑄造;你的情況,用「不區分重音」排序規則,例如:

SELECT * 
FROM table 
WHERE ProductName COLLATE SQL_Latin1_General_Cp1_CI_AI LIKE 'Chateau' COLLATE SQL_Latin1_General_Cp1_CI_AI; 

檢查您的排序規則,並作必要的調整(注意結尾「_AI」,意思是「不區分重音」)。

更高級的選項是使用Full-Text Search。讓我們知道你是否需要幫助。

相關問題