2

私はutf-8文字列を扱っています。これらは、MySQL データベース テーブルに格納する必要があります。そのため、いくつかの列に utf-8 照合を選択することにしました。今では、私が推測したほど明確ではない選択が見られます。問題は、SELECT ステートメントで大文字と小文字を区別する必要があることです。そうではありません。

最初のオプションは、別の utf-8 照合を選択することです (私が見る限り、非 ci 照合は utf8_bin だけです)。それは解決策ですか?2 つ目は、SELECT ステートメントで BINARY を使用することです。

select col1, col2
from table1
where BINARY col3='CasE_sENsiTive';

これは非常に単純ですが、パフォーマンスが少なくとも 10 倍以上低下します。私のテーブルには 1 つのインデックスがあり、BINARY がなくても問題なく動作します (インデックスなし = 遅い)。

私の状況での解決策は何ですか?

ありがとうございました。

4

2 に答える 2

3

次の方法で、大文字と小文字を区別する検索のパフォーマンスを向上させることができます。

select col1, col2 from table1 where col3='Case_sEnsiTive' AND BINARY col3="CasE_sENsiTive";

ただし、大文字と小文字を区別しない照合を行う正当な理由がない場合は、utf8_bin照合として使用することを強くお勧めします。

于 2012-04-19T21:40:40.247 に答える
2

提供された例を使用するか、列を常に大文字と小文字を区別して扱う場合は、大文字と小文字を区別する照合を割り当てます (つまり、_cs[大文字と小文字を区別する] または_bin[バイナリ] で終わる照合)。MySQL リファレンスの大文字と小文字の区別を参照してください。

于 2012-04-19T21:40:42.463 に答える