2011-12-04 58 views
2

我正在構建一個標記系統,我需要檢索類似的標記,所以當用戶打「某物「或」某物「或」某物「或」某物「等,他將得到表中所有匹配的行。在mysql中選擇類似的值(有些東西,某些東西應該是相同的)

如果我在場上使用utf8_generalutf8_unicode,它將是一塊蛋糕。我可以只

SELECT * FROM tags WHERE tag LIKE 'some thing' 

但很可惜,我需要在該表中使用utf8_bin。那麼,我該怎麼做?我不是一個非常大的mysql專家。我想我應該使用CAST()或CONVERT(),但我不知道如何。

第二部分,得到了一些-的東西,一些*的東西,一些&物等,是另一個問題,但我想我能解決它在我自己的使用正則表達式

編輯:的解 我認爲搞亂所有這些轉換和正則表達式可能不是最好的方式。相反,我將使用我的框架的方法,並生成給定標記的URL「名稱」並將其存儲在同一個數據庫行中。

+1

這是要用於非英語語言嗎?當心那些「裝飾品」具有意義。在瑞典語中,「far」意思是父親,而「får」意思是綿羊。如果我的女兒稱我爲「far」或「får」;-) –

+0

,那麼我的確關心很多,這個想法是,當用戶訪問domain.com/tag/far時,他將能夠看到項目標記爲遠或får。是的,這是一個非英語網站 – Valhallen

回答

2

是的,轉換: -

 
mysql> select convert("söme thing" using utf8) = 
convert("some thing" using utf8); 
+------------------------------------------------------------------------+ 
| convert("söme thing" using utf8) = convert("some thing" using utf8) | 
+------------------------------------------------------------------------+ 
|                  1 | 
+------------------------------------------------------------------------+ 

但我認爲是沒有好處utf8_bin

使用在處理搜索標籤,你可以考慮存儲

  • 乾淨的版本(一些)
  • 將söme和其他變體映射到乾淨版本的附加表格
  • 當用戶搜索söme時,可能需要查找söme= some
+0

有好處。 utf8_general的問題在於,a和ä是否相同,因此請使用其他類似的字母。至於你的代碼,我不確定如何使用它。我會試試看,當我有機會,感謝您的貢獻! – Valhallen

+0

當你在utf8中查找匹配時,你正在將數據存儲在utf8二進制文件中,這難道不奇怪嗎? – ajreal

+0

不,看看我上面的評論 – Valhallen