Классический способ запроса к базе данных SQL без учета регистра из Java заключается в следующем:
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
" дает разные результаты на английском и турецком языках. В приведенном выше коде есть две операции в нижнем регистре:
- Метод String # toLowerCase ()
- Нижняя () функция базы данных
Как я могу убедиться, что Java и база данных используют одну и ту же локаль и, таким образом, выполняют правильное сравнение?
Мне известно, что класс String имеет метод toLowerCase (Locale), но как мне узнать, какой Locale использует база данных? Могу ли я проверить это программно или мне нужно жестко прописать локаль к той, с которой я думаю, что база данных (в данном случае Oracle 10g) настроена?