Javaから大文字と小文字を区別せずにSQLデータベースをクエリする一般的な方法は次のとおりです。
String name = ...; // get the user's input (case is unknown)
String sql = "select * from Person where lower(name) = ?";
Object jdbcBindVariable = name.toLowerCase();
// ... using JDBC, bind that variable and run the SQL query
問題は、小文字がロケール固有の操作であるということです。たとえば、文字 " I
"を小文字にすると、英語とトルコ語で異なる結果が得られます。上記のコードには、2つの小文字の操作があります。
- String#toLowerCase()メソッド
- lower()データベース関数
Javaとデータベースが同じロケールを使用していることを確認して、有効な比較を実行するにはどうすればよいですか?
StringクラスにtoLowerCase(Locale)メソッドがあることは知っていますが、データベースが使用しているロケールを知るにはどうすればよいですか?これをプログラムで確認できますか、それともデータベース(この場合はOracle 10g)が構成されていると思われるロケールにロケールをハードコーディングする必要がありますか?