sql - 如何在 Oracle SQL 中对结果进行不区分大小写的排序?

标签 sql database oracle locale case-insensitive

从 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/

相关文章:

sql查询以收集具有共同项目的用户

mysql - 如何从表中检索学生信息?

ruby-on-rails - Rails 新手,设置数据库然后运行 ​​rake db :create/migrate

mysql - mysql中新模块的单独数据库或新表

performance - 主动跟踪 Oracle 查询性能

mysql - 包含 SQL 的正确方法

java - 奇怪的 org.springframework.jdbc.BadSqlGrammarException

mysql - 从包含日期范围的表生成每月 XML

oracle - 如何使用 FireDAC 设置与 Oracle 的 ODBC 连接?

sql - 无法将数据插入表中