1

部分文字列を含む文字列を検索するクエリを作成しようとしています。次の 2 つの方法の違いは何ですか?

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

私は最初に LIKE の使用法を学びましたが、英語 (ラテン語) と中国語 (big5) を比較しているという「不正な照合の組み合わせ..」というエラーが発生していました。照合の問題を修正する方法をグーグルで検索しているときに、locate() に出くわしました。locate() を使い続けることができるかどうか、またはそれに欠点があるかどうか疑問に思っています。

4

2 に答える 2

1

大部分は好みの問題です。

最も重要な考慮事項は、likeANSI 標準 SQL であり、ほとんどの (すべてではないにしても) データベースでサポートされていることです。 locateは MySQL に固有であるため、必ずしも他のデータベースに移植できるとは限りません。

一部のデータベースx like 'y%'は、インデックスを使用するように式を最適化します。MySQL はそうではないので、これは考慮する必要はありません。

のもう 1 つの利点は、中間一致だけでなく、like初期一致 ( 'y%') と最終一致 ( ) もサポートしていることです。'%y'3 つすべてに 1 つの方法。を使用する同等のステートメントlocateはより複雑です。

like特に移植性のために、私の好みは を使用することです。ただし、通常、さまざまな文字セットの処理に直面することはありません。回避策を探すよりも、MySQL の照合について学習した方がよい場合があります。

于 2013-03-24T23:40:24.540 に答える
0

彼らは単に同じことをしていません。LIKEはテキスト マッチングを行う演算子でありLOCATE、 は最初に出現した位置を返す関数です。

http://www.w3resource.com/mysql/string-functions/mysql-locate-function.php http://www.w3resource.com/mysql/string-functions/mysql-like-function.php

于 2013-03-24T23:42:35.973 に答える