0

私の知る限り、LIKE演算子は大文字と小文字を区別しないはずですが、文字列「ABC Software」がある場合、次のクエリが表示されます。

SELECT ...
FROM ...
WHERE ... LIKE 'AbC Softwa%'

行がゼロの結果セットを取得します(2番目の文字bを大文字にすると、正しい結果が得られます)。なんで?以前は文字エンコードとして*utf8_bin*を使用していたので、バイナリマッチングがすべてのエラーの原因であると想定して、* latin_swedish_ci *に切り替えましたが、同じ問題が発生します。

4

2 に答える 2

1

試す

SELECT ...
FROM ...
WHERE UPPER(...) LIKE 'ABC SOFTWA%'
于 2012-08-02T21:42:17.973 に答える
0

MySQLはデフォルトで大文字と小文字を区別しません。

大文字と小文字を区別する検索を実行する場合は、次を使用します。

SELECT ...
FROM ...
WHERE ... LIKE BINARY 'AbC Softwa%'

データベースまたはテーブルがデフォルトで大文字と小文字を区別するように構成されている場合、大文字と小文字を区別しない検索を実行するには、次のような操作を行う必要があります。

SELECT ...
FROM ...
WHERE ... COLLATE latin1_swedish_ci LIKE 'AbC Softwa%' COLLATE latin1_swedish_ci

utf8を使用している場合は、次のことを試してください。

SELECT ...
FROM ...
WHERE ... COLLATE utf8_general_ci LIKE 'AbC Softwa%' COLLATE utf8_general_ci

データベースで大文字と小文字が区別される理由を調査することをお勧めします。

サーバーがどのように構成されているかを確認するには、以下を実行します。

SHOW VARIABLES LIKE '%collation%';

テーブルの照合を確認するには、次のコマンドを実行します。

SHOW TABLE STATUS;

また、データベースのデフォルトの照合を確認するには、次のようにします。

SHOW CREATE DATABASE dbname;

ここdbnameで、はデータベースの名前です。

于 2012-08-02T21:39:58.880 に答える