从 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)配置的语言环境?
最佳答案
简单的答案是让数据库来做。 这样,绑定(bind)变量的小写方式将与列值的小写方式保持一致。
String sql = "select * from Person where lower(name) = lower(?)";
关于sql - 如何在 Oracle SQL 中对结果进行不区分大小写的排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2181398/