从 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
”在英语和土耳其语中给出不同的结果。在上面的代码中,有两个小写操作:
- String#toLowerCase() 方法
- lower() 数据库函数
如何确保 Java 和数据库使用相同的语言环境,从而执行有效的比较?
我知道 String 类有一个 toLowerCase(Locale) 方法,但是我怎么知道数据库使用的是什么 Locale 呢?我可以通过编程方式进行检查,还是必须将语言环境硬编码为我认为配置数据库(在本例中为 Oracle 10g)的语言环境?