2

アラビア語のテキストを含むテーブルがあります。2つの固有の行があります。

اِس
اُس

最初の文字は次の文字で構成されています:0x0627、0x0650、0x0633
2番目の文字は次の文字で構成されています:0x0627、0x064F、0x0633

問題は、これらのいずれかを照会すると、両方が表示されることです。これは、コマンドラインとphpmyadminの使用の両方で発生します。クエリに対して入力する内容は次のとおりです。

名前を設定するutf8;
SELECT urdu FROM transliteration WHERE urdu LIKE'اِس';

何かご意見は?

4

3 に答える 3

2

この両方の文字列の戻りは、たまたま MySQL の機能 (便利な機能です!) です。SELECT ステートメントは、文字の大文字と小文字または母音の長さに影響されません。この機能は照合と呼ばれます。utf_unicode_ci は、おそらく と呼ばれる列の照合urduです。

ただし、必要に応じて WHERE 句でこれを制御できます。

WHERE COLLATE utf_bin urdu = 'اِس'

(私があなたのアラビア語を台無しにしてしまった場合は、ご容赦ください。私はその言語について無知です。)

ただし、アプリケーションのデバッグを終了して本番環境に移行すると、MySQL はすでにアプリケーションに適切な結果をもたらしている可能性があることを考慮してください。

また、部分一致が必要な場合を除き、LIKE を使用する必要がないことにも注意してください。

于 2012-06-11T13:23:34.323 に答える
0

これを試して:

SELECT urdu FROM transliteration WHERE urdu LIKE 'اِس' collate utf8_bin

または、コードの最後に追加collate utf8_binしてください。文字が正しいかどうかわかりません。

于 2012-06-11T13:09:00.573 に答える
0

同じ単語を検索しています。一方は短母音で、もう一方は短母音ではありません。短母音はオプションなので、両方のバージョンを使用できます。これで、MySQL は母音を削除して同じエントリを返すほどスマートに見えます。両方のバージョンが似ているため、クエリから LIKE 引数を削除する必要があるかもしれません。

この種の問題を回避したい場合は、DB エントリから短母音をすべて取り除き、元の単語を 2 行目に保存します。次に、すべてのクエリを削除して、同一のエントリを検索することもできます。

于 2012-06-11T12:53:27.157 に答える