363

周りを見回しても自分が何を求めているのかわからなかったので、ここに行きます。

SELECT * FROM trees WHERE trees.`title` LIKE  '%elm%'

これは正常に機能しますが、ツリーの名前がElmやELMなどの場合は機能しません。

このワイルドカード検索でSQLの大文字と小文字を区別しないようにするにはどうすればよいですか?

MySQL5とApacheを使用しています。

4

16 に答える 16

345

私はいつもより低いものを使用してこれを解決しました:

SELECT * FROM trees WHERE LOWER( trees.title ) LIKE  '%elm%'
于 2010-05-20T18:41:22.930 に答える
309
SELECT  *
FROM    trees
WHERE   trees.`title` COLLATE UTF8_GENERAL_CI LIKE '%elm%'

実際、COLLATE UTF8_GENERAL_CI列の定義に追加する場合は、これらのトリックをすべて省略できます。自動的に機能します。

ALTER TABLE trees 
 MODIFY COLUMN title VARCHAR(…) CHARACTER 
 SET UTF8 COLLATE UTF8_GENERAL_CI. 

これにより、この列のインデックスも再構築されるため、「%」を先頭にせずにクエリに使用できます。

于 2010-05-20T18:44:17.750 に答える
51

大文字と小文字の区別は、列/テーブル/データベース照合設定で定義されます。次の方法で、特定の照合の下でクエリを実行できます。

SELECT *
FROM trees
WHERE trees.`title` LIKE '%elm%' COLLATE utf8_general_ci

例えば。

utf8_general_ci(有用と思われる照合に置き換えてください)。大文字と小文字を区別しないの_ci略です。

于 2010-05-20T18:43:19.403 に答える
48

これは、単純なLIKEクエリの例です。

SELECT * FROM <table> WHERE <key> LIKE '%<searchpattern>%'

LOWER()関数を使用して大文字と小文字を区別しません。

SELECT * FROM <table> WHERE LOWER(<key>) LIKE LOWER('%<searchpattern>%')
于 2014-07-19T20:50:25.567 に答える
45

単に使用してください:

"SELECT * FROM `trees` WHERE LOWER(trees.`title`) LIKE  '%elm%'";

または使用する

"SELECT * FROM `trees` WHERE LCASE(trees.`title`) LIKE  '%elm%'";

両方の機能は同じように機能します

于 2018-01-09T11:50:10.363 に答える
16

私はそのようなことをしています。

小文字で値を取得し、MySQLが残りを行います

    $string = $_GET['string'];
    mysqli_query($con,"SELECT *
                       FROM table_name
                       WHERE LOWER(column_name)
                       LIKE LOWER('%$string%')");

そしてMySQLPDOAlternativeの場合:

        $string = $_GET['string'];
        $q = "SELECT *
              FROM table_name
              WHERE LOWER(column_name)
              LIKE LOWER(?);";
        $query = $dbConnection->prepare($q);
        $query->bindValue(1, "%$string%", PDO::PARAM_STR);
        $query->execute();
于 2015-06-01T10:22:33.600 に答える
8

このクエリでは大文字と小文字を区別しない検索が行われると思います。

SELECT * FROM trees WHERE trees.`title` ILIKE '%elm%';
于 2013-08-13T14:38:55.943 に答える
8

使用するILIKE

SELECT * FROM trees WHERE trees.`title` ILIKE '%elm%';

それは私のために働いた!!

于 2018-11-08T14:40:42.020 に答える
6

非バイナリ文字列の比較(を含むLIKE)は、MySqlではデフォルトで 大文字と小文字を区別しません: https ://dev.mysql.com/doc/refman/en/case-sensitivevity.html

于 2020-04-28T08:31:24.103 に答える
5

ALTERテーブルは必要ありません。SELECTワイルドカードを使用する実際のクエリの前に、次のクエリを使用するだけです。

    set names `utf8`;
    SET COLLATION_CONNECTION=utf8_general_ci;
    SET CHARACTER_SET_CLIENT=utf8;
    SET CHARACTER_SET_RESULTS=utf8;
于 2017-06-22T09:52:56.703 に答える
2

mysql 5.5では、演算子が鈍感であるように...したがって、値がelmまたはELMまたはElmまたはeLMまたはその他であり、'%elm%'のように使用すると、一致するすべての値が一覧表示されます。

以前のバージョンのmysqlについては言えません。

Oracleを使用する場合、大文字と小文字を区別するように機能するため、「%elm%」のように入力すると、これのみが使用され、大文字は無視されます。

奇妙ですが、これがその方法です:)

于 2014-04-24T12:29:16.853 に答える
1
SELECT name 
       FROM gallery 
       WHERE CONVERT(name USING utf8) LIKE _utf8 '%$q%' 
       GROUP BY name COLLATE utf8_general_ci LIMIT 5 
于 2014-10-28T11:28:54.950 に答える
0

テーブルに対して適切なエンコーディングと照合を設定する必要があります。

テーブルエンコーディングは、実際のデータエンコーディングを反映している必要があります。あなたのデータエンコーディングは何ですか?

テーブルのエンコーディングを確認するには、クエリを実行しますSHOW CREATE TABLE tablename

于 2010-05-20T18:42:16.540 に答える
0

大文字と小文字を区別しない検索を開発する場合は、比較を行う前に、常にすべての文字列を小文字に変換します

于 2010-05-20T19:07:44.597 に答える
0

私はいつもこのように解決してきました:

SELECT * FROM trees WHERE LOWER( trees.title ) LIKE  LOWER('%elm%');
于 2022-02-01T13:20:51.547 に答える
-1

次の方法を使用できます

 private function generateStringCondition($value = '',$field = '', $operator = '', $regex = '', $wildcardStart = '', $wildcardEnd = ''){
        if($value != ''){
            $where = " $field $regex '$wildcardStart".strtolower($value)."$wildcardEnd' ";

            $searchArray = explode(' ', $value);

            if(sizeof($searchArray) > 1){

                foreach ($searchArray as $key=>$value){
                    $where .="$operator $field $regex '$wildcardStart".strtolower($value)."$wildcardEnd'";
                }

            }

        }else{
            $where = '';
        }
        return $where;
    }

以下のようにこの方法を使用してください

   $where =  $this->generateStringCondition($yourSearchString,  'LOWER(columnName)','or', 'like',  '%', '%');
  $sql = "select * from table $where";
于 2020-01-21T10:07:27.837 に答える