文字セットとして「utf8 -- UTF-8 Unicode」のスキーマと「utf8_spanish_ci」の照合があります。
すべての内部テーブルは、前述の文字セットと照合順序が同じ InnoDB です。
問題は次のとおりです。
のようなクエリで
SELECT *
FROM people p
WHERE p.NAME LIKE '%jose%';
83 行の結果が得られます。私はそれを知っているので、84の結果が必要です。
場所の変更:
WHERE p.NAME LIKE '%JOSE%';
私はまったく同じ83行を取得します。JoSe、Jose、JOSe などの組み合わせで、同じ 83 行すべてが報告されます。
問題は、アクセントがゲームで再生されるときに発生します。もしそうなら:
WHERE p.NAME LIKE '%josé%';
結果が出ません。0 行。
しかし、もしそうなら:
WHERE p.NAME LIKE '%JOSÉ%';
結果の行は1つだけなので、1行です。これは、"jose" にアクセントを付けて大文字にした唯一の行です。
アクセント付きの文字が大文字のままかどうかにかかわらず、josÉ、JoSÉ、または任意の組み合わせで試しました。データベースに実際に保存され、まだ唯一の行を返すためです。JOSE で大文字と小文字をどのように組み合わせても、突然 "É" を "é" に変更すると、行が返されません。
結論:
- ゲームでラテン文字が使用されない場合、大文字と小文字は区別されません。
- ラテン文字が表示される場合、大文字と小文字が区別されます。
- JOSE または jose を検索した場合と同様に、アクセントに敏感で、必要な 84 行ではなく、83 行しか取得できません。
私は何をしたいですか?
- 「jose」、「JOSE」、「José」、「JOSÉ」、「JÒSE」、「jöse」、「JoSÈ」などを検索するには、存在することがわかっている 84 行を返す必要があります。検索を大文字と小文字を区別せず、「ラテン語」を区別しないようにするにはどうすればよいでしょうか。
のような解決策は私COLLATION
にLIKE
はうまくいきません。理由がわかりません...
私に何ができる?
編集:
私が次のようなことをした場合:
WHERE p.NAME LIKE '%jose%' COLLATE utf8_general_ci;
エラーが発生します:
COLLATION 'utf8_general_ci' は CHARACTER SET 'latin1' には無効です
また、列で可能なすべての照合順序も変更しました。
そして、私が次のようなことをすると:
WHERE p.NAME LIKE _utf8 '%jose%' COLLATE utf8_general_ci;
あたかも何も作っていないかのように、同じ83行が報告されます...