2010-02-02 27 views
5

的经典方法从Java查询一个SQL数据库不区分大小写如下:如何在Oracle 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”给出了英语和土耳其语的不同结果。在上面的代码中,有两个下套管作业:

  • 弦乐#toLowerCase()方法
  • 下()的数据库函数

我怎样才能确保爪哇和数据库使用相同的语言环境,从而执行有效的比较?

我知道String类有一个toLowerCase(Locale)方法,但我怎么知道数据库使用的是什么Locale?我可以通过编程来检查,还是必须将语言环境硬编码为我认为数据库(本例中为Oracle 10g)配置的语言环境?

回答

2

简单的答案是让数据库执行它。 通过这种方式将绑定变量放入小写字母的方式与将列值放入小写字母的方式一致。

String sql = "select * from Person where lower(name) = lower(?)"; 
+0

这是这么简单,但我从来没有想过它。 – 2010-02-03 02:37:03

1

...但我怎么知道是什么语言环境数据库使用?我可以检查此编程...

似乎没有成为一个便携式(与数据库无关)的方式来做到这一点,但你可以明显地使用下面的查询来获取由Orable数据库使用的字符集:

select value from nls_database_parameters where parameter = 'NLS_CHARACTERSET'; 

This page给出了更多细节。正如@Gary所建议的那样,对于实际进行比较,最好是(*)让数据库负责低层管理。 JDBC驱动程序将负责将Java(UTF-16)字符串转换为数据库正在使用的任何字符串。

(*其实,我不认为你有太多的选择,除非你准备穿存储所有的可查询字符串大小写混合和小写复制数据库的成本。)

+1

“可用数据库” - 弗洛伊德滑? :-) – 2010-02-03 02:36:04

+0

哦,亲爱的!这是怎么溜进来的? :-) – 2010-02-03 02:53:57

相关问题