2013-03-24 18 views
1

我想寫一個查詢來查找包含子串的字符串。以下兩種方法有什麼區別?SQL搜索使用LIKE vs subs()的子串

  1. SELECT * FROM table WHERE names LIKE '%bob%'
  2. SELECT * FROM table WHERE locate('bob', names)

我第一次學會了用喜歡,但我是有「排序規則的非法組合。」錯誤,說我英語比較(拉丁)和中國(中文)。雖然搜索方法來解決排序問題,我碰到了定位(),當我嘗試它時沒有抱怨排序規則。只是想知道我是否可以繼續使用locate()或者是否有任何缺點。

回答

0

在很大程度上,這是一個品味的問題。

最重要的考慮因素是like是ANSI標準的SQL和大部分(如果不是全部)的數據庫支持。 locate是特定於MySQL的,因此它不一定可移植到其他數據庫。

某些數據庫優化表達x like 'y%'使用索引。 MySQL不會,所以這不是你的考慮。

like的另一個優點是它支持初始匹配('y%')和最終匹配('%y')以及中間匹配。三種方法之一。使用locate的等效語句更爲複雜。

我的選擇是使用like,特別是因爲便攜性。但是,我通常不會面對處理不同的字符集。 MySQL中的learning about collations可能比嘗試查找解決方案更好。