私は何人かを見回したが、自分が何をしているのかわからなかったのでここに行く。
SELECT * FROM trees WHERE trees.`title` LIKE '%Elm%'
これはうまくいきますが、ツリーの名前がElmやElmなどの場合は違います。
このワイルドカード検索でSQLの大文字と小文字を区別しないようにするにはどうすればよいですか。
私はMySQL 5とApacheを使っています。
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.
これにより、この列のインデックスも再構築され、先頭に '%'を付けずにクエリに使用できるようになります。
私はいつもlowerを使ってこれを解決しました:
SELECT * FROM trees WHERE LOWER( trees.title ) LIKE '%Elm%'
大文字と小文字の区別は、列/テーブル/データベース照合設定で定義されています。次のようにして、特定の照合の下でクエリを実行できます。
SELECT *
FROM trees
WHERE trees.`title` LIKE '%Elm%' COLLATE utf8_general_ci
例えば。
(utf8_general_ci
をあなたが役に立つと思うどんな照合とでも交換してください)。 _ci
は大文字と小文字を区別しないを表します。
これは単純なLIKEクエリの例です。
SELECT * FROM <table> WHERE <key> LIKE '%<searchpattern>%'
これで、LOWER()funcを使用した大文字と小文字が区別されません。
SELECT * FROM <table> WHERE LOWER(<key>) LIKE LOWER('%<searchpattern>%')
単純に使用してください
"SELECT * FROM `trees` WHERE LOWER(trees.`title`) LIKE '%Elm%'";
または使用
"SELECT * FROM `trees` WHERE LCASE(trees.`title`) LIKE '%Elm%'";
両方の機能は同じように機能します
私はそのようなことをしています。
値を小文字にするとMySQLが残りを行います
$string = $_GET['string'];
mysqli_query($con,"SELECT *
FROM table_name
WHERE LOWER(column_name)
LIKE LOWER('%$string%')");
そしてMySQL PDO代替の場合:
$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();
このクエリは大文字と小文字を区別しない検索を行うと思います。
SELECT * FROM trees WHERE trees.`title` ILIKE '%Elm%';
mysql 5.5では、operatorは鈍感ですが...あなたの値がElmかElmかElmかElmか他のもので、 '%Elm%'のように使うと、一致する値をすべてリストします。
私はmysqlの以前のバージョンについて言うことができません。
大文字と小文字を区別して作業するのと同じようにOracleを使用する場合は、「%Elm%」のように入力しても、これだけが行われ、大文字は無視されます。
奇妙な、しかしこれはそれがどのようにあるかです:)
SELECT name
FROM gallery
WHERE CONVERT(name USING utf8) LIKE _utf8 '%$q%'
GROUP BY name COLLATE utf8_general_ci LIMIT 5
テーブルをALTER
する必要はありません。実際にワイルドカードを使用するSELECT
クエリの前に、次のクエリを使用してください。
set names `utf8`;
SET COLLATION_CONNECTION=utf8_general_ci;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;
大文字と小文字を区別しないで大文字と小文字を区別したい場合は、比較の前にすべての文字列を小文字に変換します。
テーブルに適切なエンコードと照合を設定する必要があります。
テーブルエンコーディングは実際のデータエンコーディングを反映しなければなりません。あなたのデータエンコーディングは何ですか?
テーブルのエンコーディングを確認するには、クエリSHOW CREATE TABLE tablename
を実行します。
ILIKE
を使用
SELECT * FROM trees WHERE trees.`title` ILIKE '%Elm%';
それは私のために働いた!