動作しない私は、検索HQLクエリを持っています。
大文字と小文字を区別しない検索のため、入力文字列をJavaでも大文字に設定する必要があります。私は文字にeiße
を渡すことによって、このエントリを検索しよう:休止状態:<code>Heiße Suppe</code>:私は次の値を持つデータベースで</p> <pre><code>@NamedQuery(name = "Recipe.findByTitle", query = "SELECT r.title FROM Recipe r WHERE UPPER(r.title) LIKE :titlePart") </code></pre> <p>:大文字小文字を区別しない検索が特殊文字
language = "de";
characters = "eiße";
queryTitle.setParameter("titlePart", "%" + characters.toUpperCase(new Locale(language)) + "%");
鋭いS(「ß」)があるため、ドイツ語のロケールでのJavaによるSSに変換されることが、期待されています。しかし、問題は、HQLのUPPER
がシャープなSS 'をSSに変換しないため、結果が返されないということです。私は休止状態が特殊文字でUPPERで何をしているのかよく分かりませんが、同じJavaがやっているわけではありません。 (非特殊文字に対してのみ機能します)。
解決策は、両方を小文字に設定することですが、特殊文字を使用する世界のすべての言語でこの機能が動作するのではないか、またはどの言語でもAlwaysLowCaseを使用するソリューションですか?
[UPDATE]
これはすべての言語で機能するのかまだわかりませんが、ギリシャ語の値でいくつかのテストを行いました。ギリシャ語の大文字アルファアルファ(ΑΒΓΔ
)をデータベースに挿入しましたが、アルファベットの小文字アルファベット(αβγδ
)を検索したところ、結果が見つかりました。データベースが値を適切に下げるので、値を下げるのが一般的な方法かもしれません。私はこれがどんな言語でも機能するかどうか疑問に思います。
あなたはテーブルでどのような照合をしていますか? sqlの大文字小文字の動作は照合に依存します。 –
@MikhailChibel照合は常にen_US.UTF-8です。これは検索にどのような影響を及ぼしますか? – Bevor
私はこれがhqlの問題ではなく、むしろSQL自体であると信じています。 colllationテーブルにない文字がSQLの場合、文字を大文字または小文字に変換する方法がわからないことがあります。これがギリシャのシンボルとドイツ語のために働く理由です。とにかく、sqlで直接問合せを実行することをお勧めします。少なくとも、問題が発生したhqlではないことがわかります。 –